如何拆分ASCII字符的十六进制字节

Use*_*ser 3 c microcontroller low-level-code

我基本上想做的是

对于例如:"A"六角equivalant是0x61,我可以拆分6161,并将其保存为'6''1'

缓冲区正在接收如下数据:

rx_dataframe.data[0] is H'00,'.'// H' is Hex equivalant and '' is ASCII value
rx_dataframe.data[0] is H'31,'1'
rx_dataframe.data[0] is H'32,'2'
rx_dataframe.data[0] is H'33,'3'
Run Code Online (Sandbox Code Playgroud)

我需要转换hex values 0x00,0x31,0x32,0x33为char值'0','0','3','1','3','2';'3','3' 并将它们存储在的位置tx_buff_data[];

我想要tx_buff_data这样的样子

tx_buff_data[0] have H'30,'0'
tx_buff_data[1] have H'30,'0'
tx_buff_data[2] have H'33,'3'
tx_buff_data[3] have H'31,'1'
tx_buff_data[4] have H'33,'3'
tx_buff_data[5] have H'32,'2'
tx_buff_data[6] have H'33,'3'
tx_buff_data[7] have H'33,'3'
Run Code Online (Sandbox Code Playgroud)

Dre*_*wen 8

您可以使用按位AND +移位将每个字节拆分为两个半字节(4位数量):

unsigned char lo = byte & 0x0f;
unsigned char hi = (byte >> 4) & 0x0f;
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过数组查找将每一半转换为十六进制字符(因为字符串只是字符数组):

char loChar = "0123456789ABCDEF"[lo];
char hiChar = "0123456789ABCDEF"[hi];
Run Code Online (Sandbox Code Playgroud)