"12 34 aD 2b"这样格式的字符串转成{0x12,0x34,0xad,0x2b}简单C语言小算法

在进行设备串口数据调试时,总会用到串口调试助手,不同的串口调试助手,发送hex数据帧的格式各不相同,像sscom软件发送hex格式报文时,用的是如下格式"FE 01 02 02 00 01 0C 12 EF":

调试通过的数据帧,直接复制到c代码中,特么的还得手动加0x,换成16进制的,这就很烦了,有没有一个小算法吧这个字符串直接转成0xef格式的,在复制到数组中,这样就能提高一点效率了。所以有如下代码:

#include <stdio.h>
#include <string.h>

#define strdata "02 00 06 00 00 03 09"
unsigned short str2HEX(unsigned char *src,unsigned char *des)
{
   	unsigned short i=0,j=1;
	unsigned char byte = 0;
	unsigned char *ptr = src;
	while(*ptr!='\0')
	{
		if(*ptr == ' ')
		{
			des[i++] = byte;
			byte = 0;
			j = 1;
			ptr++;//跳过
		}
		else
		{
				if(*ptr >= 'a' && *ptr <= 'f')
					byte += (*ptr - '0'-39)*(16%(16+j)+16/(16+j));
				else if(*ptr >= 'A' && *ptr <= 'F')
					byte += (*ptr - '0'-7)*(16%(16+j)+16/(16+j));
			    else if((*ptr >='0') && (*ptr <= '9'))
					byte += (*ptr - '0')*(16%(16+j)+16/(16+j));
				if(j--<=0) j = 1;
				ptr++;
		}


		if(*ptr == '\0')//最后一字节
		{
			des[i++] = byte;
		}
	}
	/*
	j = i;
	for(i=0;i<j;i++)
	{
		//printf("0x%02x ",des[i]);
	*/
	return i;
}

int main()
{
	unsigned short i=0,ret;
	unsigned char datastr[255] = strdata;
   	unsigned char des[255] = {0};
	unsigned char nfcCMDsendBuf[512] = {0xfe,0x01,0x01,0x055};
        printf("Hello, World! \n");


	ret = str2HEX(datastr,des);
	for(i=0;i<ret;i++)
	{
		printf("0x%02x,",des[i]);
	}
	printf("\n");

   return 0;
}

验证小算法,有多重方式,可以在Ubuntu上编译运行,我这边给出一种比较偷懒的方法,不用打开虚拟机,在有网的情况下,使用在线编译网页进行小代码验证,非常方便:

C语言在线验证工具:https://c.runoob.com/compile/11

我运行的效果如下图:

该工具除了C语言外,还有其他语言工具,如果不想安装其他语言编译环境编译验证小代码,在线工具是非常方便的,前提是要有网,哈哈,就这样吧,希望能帮助到读者们!

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/86537222
ad