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。