由于协议转换,相邻协议所支持的数据类型存在差异,故存在数据类型转换的问题,如一个十六字节字符串“AD1D3DF4D5”需要转换为其表示的字节数组。
#include <stdio.h>
#include <string.h>
static void hexStr2Bytes(unsigned char *src, unsigned char *out)
{
int m = 0, n =0;
int len = strlen(src) / 2;
int i = 0;
for(i = 0; i < len; i++)
{
unsigned char m, n;
if(src[2*i] >= 'A' && src[2*i] <= 'F')
m = src[2*i] - 'A' + 10;
else // if(src[i] >= '0' && src[i] <= '9')
m = src[2*i] - '0';
if(src[2 *i + 1] >= 'A' && src[2*i + 1] <= 'F')
n = src[2*i + 1] - 'A' + 10;
else
n = src[2*i + 1] - '0' ;
out[i] = (m << 4) | n;
}
printf("\n");
int j = 0;
while( j < len)
{
printf("%X", out[j]);
j++;
}
printf("\n");
}
其输出结果:AD1D3DF4D5
注意:由于此处输入一般是有程序自从产生,非手工输入,此函数中未考虑字符串中存在无效字符、小写字符和奇数个字符等异常情况。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)