所以,我正在尝试将unsigned char
s 数组转换为a uint32_t
,但每次都会得到不同的结果:
unsigned char buffer[] = {0x80, 0x00, 0x00, 0x00};;
uint32_t num = (uint32_t*)&buffer;
Run Code Online (Sandbox Code Playgroud)
现在,我一直收到这个警告:
警告:初始化从指针生成整数而不进行强制转换
当我改变num
为*num
i 时,我没有得到那个警告,但这实际上并不是真正的问题(更新:嗯,现在我认为它们可能是相关的.),因为每次运行代码都有不同的结果.其次num
,一旦它正确投射,应该是128
,但是如果我需要改变缓冲区的字节顺序,我可以设法自己做,我想.
谢谢!
cni*_*tar 18
你试过这个吗?
num = (uint32_t)buffer[0] << 24 |
(uint32_t)buffer[1] << 16 |
(uint32_t)buffer[2] << 8 |
(uint32_t)buffer[3];
Run Code Online (Sandbox Code Playgroud)
这样你就可以控制字节序和诸如此类的东西.
施放char
指针并将其解释为更大的东西真的不安全.有些机器期望指向整数的指针.
假设您需要特定的固定字节顺序,cnicutar的答案是最好的.如果您想要主机端,请尝试:
uint32_t num;
memcpy(&num, buffer, 4);
Run Code Online (Sandbox Code Playgroud)
或者申请ntohl
cnicutar的答案.任何基于类型惩罚的方法都是错误和危险的.
归档时间: |
|
查看次数: |
29344 次 |
最近记录: |