![](/img/trans.png)
[英]Casting element of uint8_t to 32-bit variable on 8-bit platform or 32-bit platform
[英]32-Bit variable shifting in 8-bit MCU
我正在使用32位变量将4个8位值存储为一个32位值。
32_bit_buf[0]= cmd[9]<<16 | cmd[10]<<8| cmd[11] <<0;
cmd
是带数据的无符号字符类型
cmd [9]=AA
cmd[10]=BB
cmd[11]=CC
但是,当打印32位变量时,我得到0xFFFFBBCC
。
架构-8位AVR Xmega
语言C
谁能找出我要去的地方。
您的架构使用16bit int
,因此未定义移位16位。 将您的cmd[9]
转换为更广泛的类型,例如(uint32_t)cmd[9] << 16
应该可以工作。
您还应该将此强制转换应用于其他组件:将cmd[10]
移位8位时,您可以移入16位带符号的 int
的符号位,操作数将自动提升为该值,从而导致更多奇怪/不确定的行为。
那是因为您试图将值移入8位容器(无符号字符)并获得32位。 8位值将扩展为int
(16位),但这还不够。 您可以通过多种方式解决此问题,例如,其中一种方法就是将目标变量用作累加器。
32_bit_buf[0] = cmd[9];
32_bit_buf[0] <<= 8;
32_bit_buf[0] |= cmd[10];
32_bit_buf[0] <<= 8;
32_bit_buf[0] |= cmd[11];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.