首页 > 解决方案 > 如何获取 uint32_t 的 uint8_t 数据

问题描述

我正在使用一个微控制器,我试图连接的传感器发送 uint8_t 数据。问题是我可以使用 uint32_t 函数读取引脚。

所以我想我可以用 uint32_t 读取 pin,但我必须“提取”它。但是我开始胡说八道了...

uint32_t number = 429496729;

uint8_t x1 = (number >> (8*0)) & 0xff;
uint8_t x2 = (number >> (8*1)) & 0xff;
uint8_t x3 = (number >> (8*2)) & 0xff;
uint8_t x4 = (number >> (8*3)) & 0xff;

例如,打印 x3 给了我“™”。与 x1 相同。这里发生了什么?

标签: cbit-manipulation

解决方案


从您的代码中,“™”正是您所期望的。

// 0x19999999 - NOTE: you'd need an extra '5' on the end to make it MAX_UNIT. eg. 0xFFFFFFFF
uint32_t number = 429496729; 

uint8_t x1 = (number >> (8*0)) & 0xff; // 0x99
uint8_t x2 = (number >> (8*1)) & 0xff; // 0x99
uint8_t x3 = (number >> (8*2)) & 0xff; // 0x99
uint8_t x4 = (number >> (8*3)) & 0xff; // 0x19

如果您在扩展 ascii 中查找“™”符号,它映射到 153,例如。0x99h。


推荐阅读