こんにちは私は構造体にバイト配列を読み込もうとしています、そして、バイトは逆の順序で出てきます(私が予想したところまで)。誰かが私に起こっていることを理解するのを助けることができますか?c構造体とバイトの設定/順序付け
unsigned char buf[] = {
0x11, 0x22, 0x33, 0x44,
0x55, 0x66, 0x77, 0x88,
0x99, 0xaa, 0xbb, 0xcc
};
typedef struct mystruct {
uint16_t var1;
uint16_t var2;
uint32_t var3;
uint32_t var4;
} something;
int main(int argc,char **argv){
printf("sizeof buf: %lu %d \n",sizeof(buf),sizeof(something));
something *st = (something*)&(buf[0]);
#define pr(a) printf(#a" %x\n",a)
pr(st->var1);
pr(st->var2);
pr(st->var3);
pr(st->var4);
return(0);
}
出力:
sizeof buf: 12 12
st->var1 2211
st->var2 4433
st->var3 88776655
st->var4 ccbbaa99
私のようなものを期待していた。 ST-> VAR1これを行う1122
も出力にも同じことですか?
memcpy(&st->var1,buf,2);
pr(st->var1);
出力: ST-> VAR1 2211
のx86/Linuxサーバ、gccのバージョン4.5.3(それは場合に役立ちます)あなたの助けを
感謝。
エンディアンについて読むことをお勧めします。たとえばhttp://en.wikipedia.org/wiki/Endiannessでこれを行うことができます。 – alk