Arduino - 如何将 uint16_t 转换为十六进制
Arduino - How to convert uint16_t to Hex
我目前正在研究将数据发送到 3 个 TLC5971 LED 驱动器的草图。我需要接受 uint16_t
形式的亮度级别,然后将该值转换为两个 8 位十六进制数以传递给 LED 驱动器。
示例 65535
--> 0xFF
和 0xFF
有什么比较简单的方法吗?我发现了几种 return 字符数组和诸如此类的方法,但它们似乎不容易实现。
有没有人有做类似事情的经验?
试试这个:
uint16_t value;
uint8_t msb = (value & 0xFF00U) >> 8U;
uint8_t lsb = (value & 0x00FFU);
编辑 1:
您可以使事情复杂化并使用结构:
struct MSB_LSB
{
unsigned int MSB : 8;
unsigned int LSB : 8;
};
uint16_t value = 0x55aa;
uint8_t msb = ((MSB_LSB)(value)).MSB;
uint8_t lsb = ((MSB_LSB)(value)).LSB;
顺便说一句,十进制、十六进制和八进制是 表示法 的示例。这些表示供人类理解。计算机以便于处理器处理的表示形式在内部存储数字。因此,当您指定十进制数时,编译器会将十进制数转换为更适合处理器的值。我们人类,可以用我们最容易理解的方式来表示数字。
uint16_t value = 0x1234; // Use example with different high/low byte values
unsigned char high_byte = value >> 8; // = 0x12
unsigned char low_byte = value & 0xFF; // = 0x34
使用联合:
typedef union
{
unsigned short s;
unsigned char b[2];
} short2bytes_t;
unsigned short value=65535;
unsigned char MSB, LSB;
short2bytes_t s2b;
s2b.s = value;
MSB=s2b.b[1];
LSB=s2b.b[0];
printf("%d -> 0x%02X 0x%02X\n", value, MSB, LSB);
我目前正在研究将数据发送到 3 个 TLC5971 LED 驱动器的草图。我需要接受 uint16_t
形式的亮度级别,然后将该值转换为两个 8 位十六进制数以传递给 LED 驱动器。
示例 65535
--> 0xFF
和 0xFF
有什么比较简单的方法吗?我发现了几种 return 字符数组和诸如此类的方法,但它们似乎不容易实现。
有没有人有做类似事情的经验?
试试这个:
uint16_t value;
uint8_t msb = (value & 0xFF00U) >> 8U;
uint8_t lsb = (value & 0x00FFU);
编辑 1:
您可以使事情复杂化并使用结构:
struct MSB_LSB
{
unsigned int MSB : 8;
unsigned int LSB : 8;
};
uint16_t value = 0x55aa;
uint8_t msb = ((MSB_LSB)(value)).MSB;
uint8_t lsb = ((MSB_LSB)(value)).LSB;
顺便说一句,十进制、十六进制和八进制是 表示法 的示例。这些表示供人类理解。计算机以便于处理器处理的表示形式在内部存储数字。因此,当您指定十进制数时,编译器会将十进制数转换为更适合处理器的值。我们人类,可以用我们最容易理解的方式来表示数字。
uint16_t value = 0x1234; // Use example with different high/low byte values
unsigned char high_byte = value >> 8; // = 0x12
unsigned char low_byte = value & 0xFF; // = 0x34
使用联合:
typedef union
{
unsigned short s;
unsigned char b[2];
} short2bytes_t;
unsigned short value=65535;
unsigned char MSB, LSB;
short2bytes_t s2b;
s2b.s = value;
MSB=s2b.b[1];
LSB=s2b.b[0];
printf("%d -> 0x%02X 0x%02X\n", value, MSB, LSB);