2015-12-15 3 views
0

Я пытаюсь получать и отображать хост-MAC IDсимвол без знака для SetWindowTextA

HWND Ui_Item = GetDlgItem(Wwnd_Mess, IDC_MYMAC); 
unsigned char MACData[6]; 
UUID uuid; 

UuidCreateSequential(&uuid);   
for (int i = 2; i < 8; i++){   
    MACData[i - 2] = uuid.Data4[i]; 
} 

char HostMAC[13] = {MACData[0], '-', MACData[1], '-', MACData[2], '-', MACData[3], '-', MACData[4], '-', MACData[5], '-', '\0'}; 
SetWindowTextA(Ui_Item, HostMAC); 

, но это выглядит просто плеваться из случайных символов? Любые мысли о том, что мне не хватает?

Thanks

+1

Какой результат вы ожидали? Помните, что символ 'char' означает * один символ * –

+2

Не имеет отношения к вашей проблеме, но вы полагаетесь на частную деталь реализации UUID. UUID не всегда использует MAC как часть своих данных. И что, если компьютер имеет несколько сетевых адаптеров и, следовательно, имеет несколько MAC-адресов? Вместо этого вы можете использовать 'GetAdaptersInfo()' или 'GetAdaptersAddresses()' для получения фактических сведений о доступных сетевых адаптерах, которые включают их MAC. Затем вы можете извлечь MAC-адрес требуемого адаптера. –

ответ

1

MAC-адрес - всего 6 байт данных. Ваш код пытается интерпретировать каждый байт, как если бы он был кодированным ANSI символом. В результате вы получите именно то, что ожидалось. Вам нужно преобразовать каждый байт в шестнадцатеричное представление.

Например:

char HostMAC[18]; 
sprintf(HostMAC, "%.2X-%.2X-%.2X-%.2X-%.2X-%.2X", MACData[5], MACData[4], MACData[3], 
    MACData[2], MACData[1], MACData[0]); 

Я не уверен, положил ли я или нет байты в правильном порядке, но я уверен, что вы знаете.

+0

Это отлично работает – AngryBear

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