在进行设备串口数据调试时,总会用到串口调试助手,不同的串口调试助手,发送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语言外,还有其他语言工具,如果不想安装其他语言编译环境编译验证小代码,在线工具是非常方便的,前提是要有网,哈哈,就这样吧,希望能帮助到读者们!