GCC veya Clang'da çalışabilmesi için MSVC için yazılmış bazı C++ Kodlarını dönüştürmeye çalışıyorum.UNALIGNED MSVC'ye özel kod taşınabilir C++ koduna dönüştürülüyor mu?
kusurlu kelime
pData
HIZALANMAMıŞ olan LPCBYTE
kod örneği geçerli:
INT8 some8Value = *(UNALIGNED INT8 *)&(pData[offset]); INT64 some64Value = *(UNALIGNED INT64 *)&(pData[offset]);
ben mantıklı ne anlıyorum bu c ode yapmak istiyor, işaretçiden pData + ofsetini gösteren 1 bayt okumak ister.
İkincisi, pData + offset işaretçisinden 8 bayt okuyor.
Kafa karıştırıcı kısım, neden bir UNALIGNED. 1 bayt okumak her zaman hizalı olduğunu düşündüm. Ya da kodu bir şekilde yanlış okuyup duruyor muyum?
INT8 part1 = pData[offset]; INT8 part2 = pData[offset + 1]; ...
Sonra INT64 durumda 8 parça (örneğin) birleştirir:
Bunu yapmanın çapraz platform yolu takip mi?
8 bireysel sekizli okuyorsunuz ('pData',' INT8 * 'olduğunu varsayarak) ve uygun bir INT64'e uygun bit-manip ile birleştiriyor musunuz? Eğer öyleyse, evet eğer UINT8'i kullanmasam da, uygun şekilde yapılırsa ve taşınabilir. Kendine dikkat etmen gereken tek şey işaret bitine geçmek. Doğru yapmak zor olabilir. Yine de bu kadar yer var? – WhozCraig
@WhozCraig pData, LPCBYTE'dir.İkinci bölümde, bu 8 baytlık tamsayıyı oluşturabilecek kodu nasıl yazacağımı önermeye çalışıyorum. Burada yardım arıyorum, eğer yolum yanlışsa, nasıl yaparım? – halivingston
Frankie'nin cevabı, btw ile, yanlış hizalı veriler üzerinde kusacak olan donanıma koymaya niyetiniz olmadığını varsayardım. Intel bunun için çok bağışlayıcı olabilir. Büyük Mavi * değil *. Bu konuda Sparc da değil. – WhozCraig