1

私は以下のコードを持っていますが、私はint自分のに置くことができませんbuffer

unsigned char  buffer[1024];
buffer[0] = 0x44;
u_long fd = htonl(VERSION);
memcpy(buffer+1, &fd, 4);

手伝って頂けますか?

4

2 に答える 2

0

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
于 2012-10-07T16:34:51.080 に答える
0

値をバッファに正しく入れていますが、後で正しくチェックしていません。 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);
于 2012-10-07T17:02:57.520 に答える