【发布时间】:2015-12-22 19:25:54
【问题描述】:
现在我有一个 char 数组,其中存储了 mac 地址:
char mac_addr[6];
然后我将sprintf 放到另一个字符数组中:
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 发送到远程服务器,有一个解析函数来解析这个字符数组。解析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 数组。
【问题讨论】:
-
'08'是 2 个字符。是要将数字存储为 2 个字符的文本,还是将实际整数存储在 char 变量中? -
@NeilKirk 我想我需要将它存储为文本。
-
@Xing 你为什么这么认为?
mac_addr应该包含%02x的实际整数,并且您说“重新转换”。不是说要把地址保存到my_mac,格式和mac_addr一样吗? -
@Xing 我知道了,需要存储为文本的应该来自“like this”。而且我认为它无法实现,因为
char只能存储一个字符。 -
@MikeCAT 是的,我认为你是对的,我应该在下次发短信之前多考虑一下 = =