[英]convert String MAC address to char[6] in C
char mac[] = "00:13:a9:1f:b0:88";
int a[6];
sscanf(mac, "%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3], &a[4],
&a[5]);
总的来说,它有效。 但是,当mac包含类似“ 0(x)”的内容时,它将中断
例如
char mac[] = "01:13:a9:1f:b0:88"; // 01 became 00 in above code
有什么把戏吗?
这是由于程序其他部分引起的内存问题
**保持灵感**
sscanf知道忽略前导零。
我已经在带有Visual Studio的Windows上以及在带有gcc的Linux上尝试过您的代码,并且效果很好。 我建议您再次检查结果,因为您的程序似乎运行良好。
如果要打印与输入相同的“ a”数组,请使用带%02x修饰符的printf
简单的解决方案:
char mac[] = "00-13-a9-1f-b0-88";
int a[6];
sscanf(mac, "%x-%x-%x-%x-%x-%x", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);
然后将“ a”的值复制到char数组。
您的代码工作正常。 检查一下
int main()
{
char mac1[] = "0x2:0x13:0xa9:0x1f:0xb0:0x88";
char mac2[] = "02:13:a9:1f:b0:88";
int a[6];
sscanf(mac1, "%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);
printf("%02x:%02x:%02x:%02x:%02x:%02x\n", a[0], a[1], a[2], a[3], a[4], a[5]);
sscanf(mac2, "%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);
printf("%02x:%02x:%02x:%02x:%02x:%02x\n", a[0], a[1], a[2], a[3], a[4], a[5]);
}
输出:
02:13:a9:1f:b0:88
02:13:a9:1f:b0:88
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.