簡體   English   中英

在C中將字符串MAC地址轉換為char [6]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM