64,662
社区成员
发帖
与我相关
我的任务
分享
char* str = "1122330066a5"
unsigned char tmp[0] = 0x11;
unsigned char tmp[1] = 0x22
unsigned char tmp[2] = 0x33
unsigned char tmp[3] = 0x00
unsigned char tmp[4] = 0x66
unsigned char tmp[5] = 0xa5
void StringToHex(unsigned char* hex, char* str)
{
int len = strlen(str);
int tmp;
for (int i = 0; i < len / 2; i++)
{
if (str[2*i] >= '0' && str[2*i] <= '9')
{
tmp = ((str[2*i] - '0') << 4);
}
else if (str[2*i] >= 'A' && str[2*i] <= 'F')
{
tmp = (((str[2*i] - 'A') + 10) << 4);
}
else if (str[2*i] >= 'a' && str[2*i] <= 'f')
{
tmp = (((str[2*i] - 'a') + 10) << 4);
}
if (str[2*i+1] >= '0' && str[2*i+1] <= '9')
{
hex[i] = tmp + (str[2*i+1] - '0');
}
else if (str[2*i+1] >= 'A' && str[2*i+1] <= 'F')
{
hex[i] = tmp + (str[2*i+1] - 'A') + 10;
}
else if (str[2*i+1] >= 'a' && str[2*i+1] <= 'f')
{
hex[i] = tmp + (str[2*i+1] - 'a') + 10;
}
}
}
这样。不过效率好像有点低,代码也很丑陋,= =LZ可以将就用。char* str = "1122330066a5";
unsigned char tmp[9];//为什么这里是9而不是6呢?因为sscanf(str+10,"%2x",&tmp[5]);会tmp[5]=0xa5;tmp[6]=0;tmp[7]=0;tmp[8]=0;!
for (i=0;i<6;i++) sscanf(str+i*2,"%2x",&tmp[i]);