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

char* string to hex arrary in C

本文关键字:参数 十六进制 字符串 字符      更新时间:2023-10-16

我有char * para.mac,字符串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  rn",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

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