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])正在自行检索缓冲区第二个槽内的 1 字节unsigned char值,然后在将其传递给时将其扩展为 4 字节值ntohl()。您需要做的是检索unsigned long占用缓冲区的第二个、第三个、第四个和第五个插槽的 4 字节值并按原样使用它:

ntohl(*reinterpret_cast<u_long*>(buffer+1));

或者:

u_long version;
memcpy(&version, buffer+1, 4);
ntohl(version);
于 2012-10-07T17:02:57.520 回答
0

ntohl(buffer[1]);的值 将被采用 buffer[1](一个字符)并将被转换为long。这将导致在一个小端机器上采用&buffer[1]明显为 0 的值,对于小于 2 24(无符号)的值,正如您之前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 回答