私は以下のコードを持っていますが、私はint
自分のに置くことができませんbuffer
。
unsigned char buffer[1024];
buffer[0] = 0x44;
u_long fd = htonl(VERSION);
memcpy(buffer+1, &fd, 4);
手伝って頂けますか?
ntohl(buffer[1]);
の値 buffer[1]
が取得され(char)、キャストされます。これ long
により、リトルエンディアンのマシンでは、バイト順序を逆にする前に呼び出したように、2 24(符号なし)&buffer[1]
未満の値に対して明らかに0の値が取得されます。 。ntohl
そして、あなたが本当にバッファを調べることに興味があるなら、試してみてください
int *f =(int*) (&buffer[1]);
printf("\n %u \n", ntohl(*f));//Also *f but then you have to paste it in calculator to see allignment
値をバッファに正しく入れていますが、後で正しくチェックしていません。 ntohl(buffer[1])
は、バッファの2番目のスロット内にある1バイトのunsigned char
値をそれ自体で取得し、それをに渡すときに4バイトの値に拡張しntohl()
ます。代わりに行う必要があるunsigned long
のは、バッファの2番目、3番目、4番目、および5番目のスロットを占める4バイトの値を取得し、それをそのまま使用することです。
ntohl(*reinterpret_cast<u_long*>(buffer+1));
または:
u_long version;
memcpy(&version, buffer+1, 4);
ntohl(version);