如何将 unsigned int 转换为 unsigned char

How can I convert unsigned int to unsigned char

我正在尝试将数字传感器模块连接到 Arm Cortex M4F 芯片。

接收到的数据是来自模块的3个字节。然而,我的 MCU 中唯一可用的功能是 uint32_t 读取功能。我不知道为什么没有 uint8_t 函数,但也许这只是移位的问题?我边走边学 c++。

所以我读取的值为:

uint32_t value = mcu_read(pin);

value 现在包含一个 uint32_t,4 个字节。我需要前三个。是否有可能以任何方式将其移出 "extract"? 这有意义吗? showstopper 是 mcu_read 函数,它至少读取 4 个字节。如果那里有一个 uint8_t 读取函数,我可以调用它三次来获取我需要的数据。

是这样的吗?

uint32_t value = mcu_read(pin);
uint8_t* bytes = (uint8_t*)(&value);
uint8_t byte_0 = bytes[0];
uint8_t byte_1 = bytes[1];
uint8_t byte_2 = bytes[2];
uint8_t byte_3 = bytes[3];

注意字节顺序

您可以使用 bit shift and logical and:

提取字节
uint32_t value = mcu_read(pin);
uint8_t byte_0 = (value >> 24) & 0xFF;
uint8_t byte_1 = (value >> 16) & 0xFF;
uint8_t byte_2 = (value >> 8) & 0xFF;
uint8_t byte_3 = (value) & 0xFF;
#include <stdio.h>
#include <stdint.h>

int main()
{
    uint32_t value = 0xAABBCCDD;
    //-------------------------------
    //byte3 | byte2 | byte1 | byte0 | 
    //-------------------------------
    uint8_t byte_0 = (uint8_t)value; //truncation according to casting rules
    printf("first byte: %x\n",byte_0);
    value>>=8; //right shift will result in the following bytes:
    //-------------------------------
    // garbage | byte3 | byte2 | byte1 | 
    //-------------------------------
    uint8_t byte_1 = (uint8_t)value;
    printf("second byte: %x\n ",byte_1);
    value>>=8;
    //etc...
}

输出:

first byte: dd
second byte: cc