我在下面有一个代码,但我无法放入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