c - 如何获取uint32_t的uint8_t数据

标签 c bit-manipulation

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

所以我想我可以用 uint32_t 读取引脚,但我必须“提取”它。但我却胡言乱语......

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相同。这是怎么回事?

最佳答案

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

// 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。

关于c - 如何获取uint32_t的uint8_t数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004638/

相关文章:

C - 函数读取(文件、缓冲区、要读取的字节)打破字符串

c++ - 在 C 或 C++ 中从 LaTeX 制作 PNG|jpeg

c - 位操作——为前 N 个设置位生成掩码

delphi - 使用按位/其他运算符的 Pascal Script Round

c++ - 如何在 C++ 中从文件中读取 ADTS header ?

c可变参数函数,相同的参数,不同的格式

c - 在 C 中,结构体的数据成员如何用作同一结构体的成员所指向的函数的一部分?

c - 如何使用 CMAKE 从命令行在 Windows 上构建 x86 和/或 x64?

c - 了解 C 编程中的位操作(设置/清除)

c - 如何清除 C 中的 unsigned char 数组位?