如何将 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
我正在尝试将数字传感器模块连接到 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