如何将uint16_t数字转换为ASCII HEX?



将无符号16位整数转换为ASCII HEX的最佳方法是什么?我试图将我的Arduino与串行通信协议集成,该协议期望有效载荷为2字节ASCII HEX值的数组。我希望能够在字符数组中存储HEX表示的每个字符,因为完整的消息(具有开始和停止字符)需要在传输之前进行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;
}

最新更新