我有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 \r\n",m[i]);
但似乎没有用
我也不知道为什么结果会显示为:。
1178718391
0
0
134448233
8
134272063
我想应该是
200(0xc8)
147(0x93)
70(0x46)
65(0x41)
208(0xd0)
183(0xb7)
那么问题出在哪里?
如果我没记错的话,你的方向是对的,你可以试试:int i; int m[6; sscanf(para...)。
考虑尝试一下。"%2x%2x%2x%2x%2x%2x"
这意味着每个十六进制数字最多只能消耗两个字符。
你使用的是 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
.
所以现在可以正常工作了。