在C语言中,将char*字符串转为十六进制。

问题描述 投票:1回答:2

我有char * para.macc8934641d0b7 存储在其中。

我想把它转换为十六进制数组 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
2个回答
2
投票

如果我没记错的话,你的方向是对的,你可以试试:int i; int m[6; sscanf(para...)。

考虑尝试一下。"%2x%2x%2x%2x%2x%2x"这意味着每个十六进制数字最多只能消耗两个字符。


2
投票

你使用的是 sscanf 函数。

  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.

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

© www.soinside.com 2019 - 2024. All rights reserved.