改进:转换后可以放在原数组里,以节约资源。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//把16进制src字符串转为16进制数组dest 比如:“1234” {0x12,0x34} 返回长度
unsigned int HexStringtoByte(char *dest, char *src)
{
unsigned int i = 0;
int j=0;
unsigned int length=strlen(src)/2;
for (; i < length; i++)
{
sscanf(src + 2 * i, "%02X", &j); //j是4个字节,j来临时中转
*(dest+i)=(char)j;
}
return length;
}
int main()
{
unsigned int i;
char src[]="123400";
unsigned int length=HexStringtoByte(src,src);//转换后放在原数组里,可能存在0x00,转换后长度不能用strlen来求了。
for(i=0;i<length;i++)
{
printf("%02X\n",src[i]); //12 34 00
}
return 0;
}
原创原版:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//把16进制src字符串转为16进制数组dest 比如:“1234” {0x12,0x34} 返回长度
int HexStringtoByte(char *dest, char *src)
{
char i = 0;
int length=strlen(src)/2;
for (; i < length; i++)
{
sscanf(src + 2 * i, "%02X", (int *)(dest+i));
}
return length;
}
int main()
{
char dest[2000]={0};
char src[]="383132";
HexStringtoByte(dest,src);
printf("%02X %02X %02X\n",dest[0],dest[1],dest[2]); //38 31 32
return 0;
}