在C ++

时间:2015-09-25 03:01:52

标签: c++ c arrays char

现在我有一个char数组,其mac地址存储在:

char mac_addr[6];

sprintf进入另一个char数组:

char cmdstr[64];
sprintf(cmdstr, "MAC: %2x:%2x:%2x:%2x:%2x:%2x;",
mac_addr[0], mac_addr[1], mac_addr[2],
mac_addr[3], mac_addr[4], mac_addr[5]);

当我打印cmdstr时,它看起来像这样:

MAC: 08:10:76:10:26:21;

然后我将cmdstr发送到远程服务器,有一个解析函数来解析这个char数组。在解析cmdstr之后,由:分隔的六个部分存储在多字符数组中:

char mac[6][10];

使用:

char mac[0] = "08"
char mac[1] = "10"
char mac[2] = "76"
char mac[3] = "10"
char mac[4] = "26"
char mac[5] = "21"   

现在,在服务器端,如何将mac地址的每个部分重新转换为char,并使整个mac地址可以存储在这样的char数组中?

char my_mac[6];

使用:

my_mac[0] = '08'
my_mac[1] = '10'
my_mac[2] = '76'
my_mac[3] = '10'
my_mac[4] = '26'
my_mac[5] = '21'

非常感谢!

编辑:

抱歉,我认为我描述错误,文字'08'本身不应存储在my_mac[0]中。实际上,当我gdb程序时,我发现:

(gdb) p mac_addr[0]
$15 = 8 '\b'
(gdb) p mac_addr[1]
$16 = 16 '\020'
(gdb) p mac_addr[2]
$17 = 118 'v'
(gdb) p mac_addr[3]
$18 = 16 '\020'
(gdb) p mac_addr[4]
$19 = 38 '&'
(gdb) p mac_addr[5]
$20 = 33 '!'

我想我应该像上面一样将mac[6][10]转换为char数组。

1 个答案:

答案 0 :(得分:0)

您可以在strtol

中使用stdlib.h功能
char *dummy;
for (int i = 0; i < 6; i++) {
    my_mac[i] = strtol(mac[i], &dummy, 16);
}