在C

时间:2018-10-02 10:15:06

标签: 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 

有把戏吗?


这是由于程序其他部分引起的内存问题

**继续在这里寻求灵感**

3 个答案:

答案 0 :(得分:1)

sscanf知道忽略前导零。

我已经在Visual Studio的Windows上和gcc的linux上尝试过您的代码,并且效果很好。我建议您再次检查结果,因为您的程序似乎可以正常工作。

如果要打印与输入相同的'a'数组,请使用带有%02x 修饰符

的printf

答案 1 :(得分:1)

简单的解决方案:

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数组。

答案 2 :(得分:0)

您的代码可以正常工作。检查一下

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