C 中的 char* 字符串到十六进制数组

char* string to hex arrary in C

我有 char * para.mac, string c8934641d0b7 存储在里面。

我想把它转换成十六进制数组int m[6], 制作

m[0]=0xc8;
m[1]=0x93;
...
m[5]=0xb7;

我尝试使用:

int i;
int m[6];
sscanf(para.mac, "%x%x%x%x%x%x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);

for(i=0;i<6;i++)
    printf("%i  \r\n",m[i]);

但是好像不行。

而且我不知道为什么结果向我显示:

1178718391  
0  
0  
134448233  
8  
134272063  

我觉得应该是

200(0xc8)
147(0x93)
70(0x46)
65(0x41)
208(0xd0)
183(0xb7)

所以问题是什么?

如果我没记错的话,你是对的。

考虑尝试:"%2x%2x%2x%2x%2x%2x",这意味着每个十六进制数字最多只占用 2 个字符。

您正在使用 sscanf 函数中唯一的 %x。

  sscanf(buf, "%x%x%x%x%x%x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);

这只会得到十六进制的字符。但它应该需要两个字符来转换它。 您可以像这样更改 sscanf 函数:

 sscanf(buf, "%2x%2x%2x%2x%2x%2x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);

现在根据您的字符串:c8934641d0b7 第一个 %2x 将获得 c8,第二个 %2x 将获得 93,第三个将获得 46,第四个将获得 41,第五个将获得 d0,并且最后第五名会得到b7.

所以它现在可以正常工作了。