dword を 4 バイトの配列にキャストしようとしています。これを行うと、バイトが反転しているように見えます (エンディアンが変更されます)
私が理解しているように、リトル エンディアン システムで 0x11223344 に等しい dword は次のようになります
。
しかし、私がこれを行うとき:
typedef unsigned long dword;
typedef unsigned char byte;
int main(void)
{
dword a = 0x11223344;
byte b[4];
memcpy(b, &a, 4);
printf("%x %x %x %x\n", b[0], b[1], b[2], b[3]);
}
私は44 33 22 11を取得します。11 22 33 44
になると予想していました。
reinterpret_cast またはを使用すると、同じことが起こります
union
{
dword a;
byte b[4];
} foo;
コンパイラ/プロセッサではなく、間違っていると思いますが、ここで何が欠けていますか? また、これはビッグエンディアンシステムではどのように見えますか?
編集:リトルエンディアンシステムの私の理解は間違っていたと思います。別の質問: 移植性がありながら高速なのはどちらですか: シフトを使用して個々のバイト値を取得するか、memcpy/reinterpret_cast を使用してから htonl()/ntohl() を使用しますか?