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

标签 c microcontroller low-level-code

基本上我想做的是

例如:'a' 十六进制等价物是 0x61,我可以将 61 分成 61 > 并将它们存储为 '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'

我需要将 hex values 0x00,0x31,0x32,0x33 转换为 char value '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'

最佳答案

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

unsigned char lo = byte & 0x0f;
unsigned char hi = (byte >> 4) & 0x0f;

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

char loChar = "0123456789ABCDEF"[lo];
char hiChar = "0123456789ABCDEF"[hi];

关于c - 如何拆分 ASCII 字符的十六进制字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327211/

相关文章:

c - 通过链接器运行程序时出现段错误?

c - C 中的函数、队列、全局变量

c - 如何用微 Controller 处理一堆0和1?

C 低级标准输入接受文件名,然后将文件内容打印到标准输出

c - 为什么 itoa 被宣布为不安全?

c - 文件 I/O 困惑

将编码的音频文件转换为具有信号值的文本

c - ARM Cortex 上的 super 简单 Tasker

c - 如果 (n!=0) n=0; v/s n=0;哪个更有效,为什么?