C语言实现字符串转十六进制
背景介绍
在嵌入式系统中, 通常会使用串口发送字符串的方式与通信模块通信,比如NBIoT模块。 有的通信模块不支持二进制形式进行透传,需要MCU事先将二进制数据转换为十六进制的字符串形式发送。比如,MCU需要发送的数据为0x1234,但通信模块只能接受字符串形式,因此必须要将其转换成字符串形式的"1234",通信模块才能正常接收处理。
具体要求
请实现一个转换函数void to_hex_string(char* pSrc, char* pDst, int len) 其中,原始二进制数据从pSrc输入,len表示数据的长度,转换后的结果保存到pDst中,pDst指向一个长度足够长的数组变量。 最后,打印该字符串的内容。
代码如下
#include <stdio.h>
#include <string.h>
void to_hex_string(const char *pSrc, char *pDst, int len)
{
const char mapping_hex_string[] = "0123456789ABCDEF";
for (int i = 0; i < len; i++, pSrc++)
{
pDst[i * 2] = mapping_hex_string[*pSrc >> 4];
// printf("pDst[i * 2]=%c\n", pDst[i * 2]);
pDst[i * 2 + 1] = mapping_hex_string[*pSrc & 15];
// printf("pDst[i * 2 + 1]=%c\n", pDst[i * 2 + 1]);
}
}
int main() {
char result[100] = {};
short a = 0x1234;
to_hex_string((char*)&a, result, sizeof(a));
printf("a=0x%s\n", result);
return 0;
}
输出结果:a=0x3412
备注:实际上因为int a 在PC内存中按小端方式存放,因此实际输出结果为0x3412。