我的代码如下,但我无法将int
添加到我的buffer
。
unsigned char buffer[1024];
buffer[0] = 0x44;
u_long fd = htonl(VERSION);
memcpy(buffer+1, &fd, 4);
你能帮助我吗?
答案 0 :(得分:0)
ntohl(buffer[1]);
的{{1}}值将被取消(一个字符)并将被转换为buffer[1]
。这将导致小端机器在{{1}处取值对于小于2 24 (无符号)的值,显然为0,因为之前调用long
会反转字节顺序。
如果您真的有兴趣查看缓冲区,请尝试
&buffer[1]
答案 1 :(得分:0)
您正在将值正确地放入缓冲区,但之后您没有正确检查它。 ntohl(buffer[1])
正在检索缓冲区第二个插槽内的1字节unsigned char
值,然后在将其传递给ntohl()
时将其扩展为4字节值。你需要做的是检索占用缓冲区的第二,第三,第四和第五个槽的4字节unsigned long
值并按原样使用它:
ntohl(*reinterpret_cast<u_long*>(buffer+1));
或者:
u_long version;
memcpy(&version, buffer+1, 4);
ntohl(version);