【发布时间】:2021-05-04 12:48:32
【问题描述】:
我是 c 编程的新手,并且正在使用套接字编程。我想将 char* 缓冲区中的值存储到不同的变量中,但我在存储 int 值时遇到了麻烦。
我从套接字接收到的数据是二进制的,并使用recv() 保存在char* buffer 中。
缓冲区的前 3 个字节将保存在三个不同的 unsigned char 变量中,这样做可以正常工作:
unsigned char first = buffer[0];
unsigned char second= buffer[1];
unsigned char third = buffer[2];
现在我的问题出现了。我想将下一个字节保存在两个 int 变量中(每个 4 个字节)。现在我试过了:
unsigned int fourth= buffer[3];
unsigned int fifth= buffer[7];
第四个变量保存数字 83,这是预期的。 但是,第五个变量应该是数字 1000,但我得到的是 232。我在这里缺少什么?
【问题讨论】:
-
至少在你的问题中显示字符缓冲区的内容,
-
您是否已经了解了多字节值?您需要根据二进制数据的字节序来计算整数。
-
我猜这已经是answered here了。但是当 OP 询问他为什么得到 232 而不是 1000 时:
unsigned int fifth= buffer[7];表示将 char 值(一个字节)从buffer[7]分配给堆栈上的变量fifth。由于十进制 1000 是十六进制的 0x3E8,并且数据以 little endian 方式存储,因此buffer[7]中的 0xE8(十进制 232)和buffer[8]中的 0x3,buffer[9]和buffer[10]中的 0x0。 -
unsigned int fifth= buffer[7];不从buffer[7..10]中获取四个字节,它只获取buffer[7]的值并将其作为int 存储到fifth中。请参阅链接的问题以了解如何获取您的 int 值。 -
"正在使用套接字编程" 那么使用的协议的网络字节序和客户端的 CPU 字节序是什么?
标签: c