C++ 将int放入现有缓冲区

C++ 将int放入现有缓冲区,c++,int,buffer,C++,Int,Buffer,我下面有一个代码,但我不能将int放入我的缓冲区 unsigned char buffer[1024]; buffer[0] = 0x44; u_long fd = htonl(VERSION); memcpy(buffer+1, &fd, 4); 你能帮我吗?在ntohl(缓冲区[1])缓冲区[1]的值将被获取(一个字符),并将被转换成long。这将导致在一台小型endian机器上获取缓冲区[1]处的值,对于小于224(无符号)的值,这显然是0,正如您之前调用的ntohl,它反转了

我下面有一个代码,但我不能将
int
放入我的
缓冲区

unsigned char  buffer[1024];
buffer[0] = 0x44;
u_long fd = htonl(VERSION);
memcpy(buffer+1, &fd, 4);
你能帮我吗?

ntohl(缓冲区[1])
缓冲区[1]
的值将被获取(一个字符),并将被转换成
long
。这将导致在一台小型endian机器上获取
缓冲区[1]
处的值,对于小于224(无符号)的值,这显然是0,正如您之前调用的
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

您正在将值正确地放入缓冲区,但之后没有正确地检查它
ntohl(buffer[1])
正在单独检索缓冲区第二个插槽中的1字节
无符号字符
值,然后在将其传递给
ntohl()
时将其扩展为4字节值。您需要做的是检索占据缓冲区第二、第三、第四和第五个插槽的4字节
无符号长
值,并按原样使用它:

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

谢谢好吧,但我有个问题。在我的C#服务器应用程序中尝试读取此
int
时,出现了一个错误“数字溢出”。你知道吗?换一个问题是不好的习惯…如果有必要,再问另一个问题。这会使别人的回答毫无用处。
u_long version;
memcpy(&version, buffer+1, 4);
ntohl(version);