C 将char []从网络转换为主机订单,并分配给无符号int
C++ convert char[] from network to host order and assign to unsigned int
我有一个在网络字节顺序中的字符数组。我正在尝试将存储在索引[4-7]中的字符转换为主机顺序,并将其分配给未签名的INT。我有以下功能:
unsigned int parse_num_bytes(char buf[]){
unsigned int num_bytes = ((unsigned int)buf[7] << 24) | ((unsigned int)buf[6] << 16) | ((unsigned int)buf[5] << 8) | (unsigned int)buf[4];
return num_bytes;
}
来自GDB(由于我在Mac上而accutly LLDB),我可以看到该操作会生成正确的结果,但是在分配后,该值是错误的:
81
82 unsigned int parse_num_bytes(char buf[]){
83 unsigned int num_bytes = ((unsigned int)buf[7] << 24) | ((unsigned int)buf[6] << 16) | ((unsigned int)buf[5] << 8) | (unsigned int)buf[4];
-> 84 return num_bytes;
85 }
(lldb) p num_bytes
(unsigned int) $0 = 4294967170
(lldb) p ((unsigned int)buf[7] << 24) | ((unsigned int)buf[6] << 16) | ((unsigned int)buf[5] << 8) | (unsigned int)buf[4]
(unsigned int) $1 = 2434
为了澄清,2434
是正确的值。
这是我生成网络排序的地方(在服务器应用程序中):
return_buf[4] = index & 0xff;
return_buf[5] = (index >> 8) & 0xff;
return_buf[6] = (index >> 16) & 0xff;
return_buf[7] = (index >> 24) & 0xff;
,从GDB我可以向您展示索引的值(这是unsigned int
)
142 return_buf[4] = index & 0xff;
143 return_buf[5] = (index >> 8) & 0xff;
144 return_buf[6] = (index >> 16) & 0xff;
-> 145 return_buf[7] = (index >> 24) & 0xff;
146
147 in_file.close();
148 Rio_writen(connfd, return_buf, MAXLINE);
(lldb) p index
(unsigned int) $0 = 2434
猜测您的char
类型已签名,因此可以包含负值。那些不能很好地转换为unsigned int
。
您可能需要将unsigned char
用于缓冲区类型。
相关文章:
- 如何为地图< map<int,int> 、bool > 分配值?
- 是否需要动态分配单个 int?
- 这行代码中的内存是如何分配"int **v = new int*[n]; "的?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 类型别名允许分配任意指针,尽管 int* 是必需的
- 为什么我不能将 int 分配给结构成员的联合成员?
- C++程序无法分配 int 数组?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何正确分配动态创建int并将其分配给具有值的动态数组数组
- 使用 cudaMalloc() 在使用 std::vector<int *时进行分配>
- C ++中新分配的int的内存大小,有没有不同更好的方法来查看它?
- 只读位置'__result.std::_Rb_tree_const_iterator<_Tp>::operator*<long long int>()'分配错误
- 为什么这个指针到指针的二维数组像这样分配新的 int
- 将负数分配给未签名的INT
- 不能将 "const char*" 类型的值分配给类型 "int" 的实体
- 如何将int分解为数字并以相同的顺序为向量分配数字
- 将输入分配给字符串,int数组和int的问题
- 数组类型 'int [8]'不可分配
- 在访谈中,用C++编写两个函数来分配和取消分配int数组
- 为地址分配int值