如何将 uint16_t 数字转换为 ASCII HEX?
How to convert uint16_t number to ASCII HEX?
将无符号 16 位整数转换为 ASCII HEX 的最佳方法是什么?我正在尝试将我的 Arduino 与串行通信协议集成,该协议期望有效负载为 2 字节 ASCII HEX 值的数组。我希望能够将 HEX 表示的每个字符存储在一个 char 数组中,因为完整的消息(带有开始和停止字符)在传输之前需要进行 CRC 校验和。
例如,要传输十进制值 129,它需要字符串 0081(0x00 和 0x81)。要传输十进制值 35822,它需要一个 8BEE 的字符串。
我主要使用 Python,所以我不太熟悉转换为不同的数据类型。
谢谢!
编辑:我实际上正在使用 Teensy 4.0,只是出于习惯写了 Arduino
static const char *digits = "0123456789ABCDEF";
char *toHex(char *buff, uint16_t val, int withNULL)
{
buff[0] = digits[(val >> 12)];
buff[1] = digits[((val >> 8) & 0xf)];
buff[2] = digits[((val >> 4) & 0xf)];
buff[3] = digits[(val & 0xf)];
if(withNULL) buff[4] = 0;
return buff;
}
char *toHex1(char *buff, uint16_t val, int withNULL)
{
unsigned char d;
buff[0] = (char)((d = (val >> 12)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[1] = (char)((d = ((val >> 8) & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[2] = (char)((d = ((val >> 4) & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[3] = (char)((d = (val & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
if(withNULL) buff[4] = 0;
return buff;
}
将无符号 16 位整数转换为 ASCII HEX 的最佳方法是什么?我正在尝试将我的 Arduino 与串行通信协议集成,该协议期望有效负载为 2 字节 ASCII HEX 值的数组。我希望能够将 HEX 表示的每个字符存储在一个 char 数组中,因为完整的消息(带有开始和停止字符)在传输之前需要进行 CRC 校验和。
例如,要传输十进制值 129,它需要字符串 0081(0x00 和 0x81)。要传输十进制值 35822,它需要一个 8BEE 的字符串。
我主要使用 Python,所以我不太熟悉转换为不同的数据类型。
谢谢!
编辑:我实际上正在使用 Teensy 4.0,只是出于习惯写了 Arduino
static const char *digits = "0123456789ABCDEF";
char *toHex(char *buff, uint16_t val, int withNULL)
{
buff[0] = digits[(val >> 12)];
buff[1] = digits[((val >> 8) & 0xf)];
buff[2] = digits[((val >> 4) & 0xf)];
buff[3] = digits[(val & 0xf)];
if(withNULL) buff[4] = 0;
return buff;
}
char *toHex1(char *buff, uint16_t val, int withNULL)
{
unsigned char d;
buff[0] = (char)((d = (val >> 12)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[1] = (char)((d = ((val >> 8) & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[2] = (char)((d = ((val >> 4) & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
buff[3] = (char)((d = (val & 0xf)) > 9 ? ('A' + d - 10) : ('0' + d));
if(withNULL) buff[4] = 0;
return buff;
}