我在下面有一个代码,但我无法放入int
我的buffer
.
unsigned char buffer[1024];
buffer[0] = 0x44;
u_long fd = htonl(VERSION);
memcpy(buffer+1, &fd, 4);
你能帮助我吗?
您正在正确地将值放入缓冲区,但之后您没有正确检查它。 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);
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