【问题标题】:char* string to hex arrary in Cchar *字符串到C中的十六进制数组
【发布时间】:2015-05-22 02:19:04
【问题描述】:

我有 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)

那么问题出在哪里?

【问题讨论】:

    标签: c++ c char hex


    【解决方案1】:

    如果我没记错的话,你是在正确的轨道上。

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

    【讨论】:

      【解决方案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

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

      【讨论】:

      • OP 注释:技术上 m 应该是 unsigned int m[6]; 才能工作。尽管在大多数系统上,带有signed int 的版本无论如何都可以工作。
      猜你喜欢
      • 2015-05-22
      • 2015-04-14
      • 2012-05-30
      • 2011-10-01
      • 1970-01-01
      • 2014-12-12
      • 2013-06-02
      • 2011-03-25
      相关资源
      最近更新 更多