将int放入现有缓冲区

时间:2012-10-07 16:24:18

标签: c++ int buffer

我的代码如下,但我无法将int添加到我的buffer

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

你能帮助我吗?

2 个答案:

答案 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);