有一8字节的十六进制的字符串,现在要把它转成asccii 数组。在android NDK 下直接用strtol 函数可以转换,在不是f开头时转换结果是正确的,但若是以f 开头的8字节十六进制字符串转出来的就有问题了,不知何原因。因为我在PC上测试时,怎么换都是正确的。难道是因为android 是32位的?
因些自己写了个函数来转换,如下函数:
int hex2char(uint8_t *dest,const char str[],size_t len)
{
char hex[8]={10,11,12,13,14,15};
int i=0;
uint8_t *p=dest;
for(;i<len;i+=2){
char s=str[i];
char s2=str[i+1];
if(s>='a'&&s<='f'){
s=hex[s-'a'];
}else if(s>='0'&&s<='9'){
s=s-'0';
}
if(s2>='a'&&s2<='f'){
s2=hex[s2-'a'];
}else if(s2>='0'&&s2<='9'){
s2=s2-'0';
}
uint8_t ch=(s<<4|s2);
dest[i/2]=ch;
}
return 1;
}
经测试,可以正确转换本人需要的数据