2015-09-25 5 views
0

Теперь у меня есть массив символов с адресом макинтош хранится в:Преобразование символ [] [] на символ [] в C++

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' 

Большое спасибо!

Edit:

К сожалению, я думаю, что я описал что-то неправильно, текст '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] в массив символов, как и выше.

+0

' '08'' составляет 2 символов. Вы хотите сохранить номер в виде текста с двумя символами или сохранить фактическое целое число в переменной char? –

+0

@NeilKirk Я думаю, мне нужно, чтобы он хранился как текст. – wangx1ng

+0

@Xing Почему вы так думаете? 'mac_addr' должно содержать фактическое целое число для'% 02x', и вы говорите «переконвертировать». Разве это не означает, что вы хотите сохранить адрес в 'my_mac' в том же формате, что и' mac_addr'? – MikeCAT

ответ

0

Вы можете использовать функцию strtol в stdlib.h

char *dummy; 
for (int i = 0; i < 6; i++) { 
    my_mac[i] = strtol(mac[i], &dummy, 16); 
} 
+1

Это решение не содержит ошибок. Что делать, если входящий адрес был искажен? – owacoder

+0

Извините, это не ответ. Это хранилище кода, например 'my_mac [0] = 0x08', а не как указано' my_mac [0] = '08''. – MikeCAT

+0

Я думаю, что это действительно то, что он хочет, потому что он просит исходный символ [6], и только 6-байтная двоичная форма будет вписываться в 6 символов. Его оригинальный char [6] был преобразован из двоичного в текст с помощью sprintf, и похоже, что он просто хочет десериализоваться обратно в эту (двоичную) форму. Когда он пишет 'my_mac [0] = '08'', он, вероятно, означает' my_mac [0] =' \ x08'' –

Смежные вопросы