在下面的代码中,我将 mac 地址存储在一个字符数组中。
但即使我将它存储在一个 char 变量中,打印时它的打印如下:
ffffffbb
ffffffcc
ffffffdd
ffffffee
ffffffff
这是代码:
#include<stdio.h>
int main()
{
char *mac = "aa:bb:cc:dd:ee:ff";
char a[6];int i;
sscanf(mac,"%x:%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5]);
for( i = 0; i < 6;i++)
printf("%x\n",a[i]);
}
我需要按以下方式输出:
aa
bb
cc
dd
ee
ff
当前的printf语句是
printf("%x\n",a[i]);
即使我将 aa
存储在 char 数组中,我如何才能获得所需的输出以及为什么 printf 语句打印 ffffffaa
?
最佳答案
您正在使用 %x
,它期望参数为 unsigned int *
,但您只是传递 char *
。这是危险的,因为 sscanf()
将 执行 int
大小的写入,可能写入分配给变量的空间之外。
将 sscanf()
的转换说明符更改为 %hhx
,这意味着 unsigned char
。然后更改打印以匹配。此外,当然,使 a
数组 unsigned char
。
还要检查以确保 sscanf()
成功:
unsigned char a[6];
if(sscanf(mac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
a, a + 1, a + 2, a + 3, a + 4, a + 5) == 6)
{
printf("daddy MAC is %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
a[0], a[1], a[2], a[3], a[4], a[5]);
}
关于c - 如何以特定方式打印十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697891/