stm32 单片机 uint32_t 变量 的值0x29d1910 转换成10进制后 43850000 赋值给 4个元素的数组 i[4]={0x43,0x85,0x00,0x00} 的程序
时间: 2024-10-01 20:12:28 浏览: 35
STM32单片机中的`uint32_t`是一种32位无符号整型,它可以存储从0到4294967295的十进制数值。如果`uint32_t`变量的值为`0x29d1910`,这个二进制形式对应的十进制就是43850000。
要将这个数值分解并赋值给一个4元素的`unsigned char`数组`i[4]`,我们可以按位拆分并分别赋值:
```c
// 定义一个32位变量存储原始值
uint32_t value = 0x29d1910;
// 初始化数组
unsigned char i[4] = {0, 0, 0, 0};
// 分解并赋值给数组
i[0] = value & 0xFF; // 最低位
value >>= 8; // 移位去掉最低位
i[1] = value & 0xFF; // 下一位
value >>= 8; // 移位去掉下一位
i[2] = value & 0xFF; // 再下一位
value >>= 8; // 移位去掉再下一位
i[3] = value; // 剩余部分赋值给最后一个元素
```
注意:`value >>= 8`相当于右移一位,这里`value`实际上已经被清零了,因为最开始我们已经提取了最低八位,剩下的就是最高24位。所以最终`i[3]`会直接等于`0x29d1`转换后的值,也就是十进制的4385。
完整的程序看起来像这样:
```c
#include "stm32f1xx.h"
int main(void)
{
uint32_t value = 0x29d1910;
unsigned char i[4] = {0};
i[0] = value & 0xFF;
value >>= 8;
i[1] = value & 0xFF;
value >>= 8;
i[2] = value & 0xFF;
i[3] = value; // 实际上这里不需要右移,因为我们已经处理了24位
// 输出数组内容
for(int j = 0; j < 4; ++j)
{
printf("i[%d]: 0x%02X\n", j, i[j]);
}
return 0;
}
```
阅读全文