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
.
所以它现在可以正常工作了。
我有 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
.
所以它现在可以正常工作了。