2016-01-13 5 views
3

Я абсолютно не делаю C, но для небольшой вещи мне нужно сделать очень простую функцию. У меня проблема с пониманием результата.Ouptut PIN-код с MAC-адреса с использованием char

У меня есть MAC-адрес, и мне нужно вывести PIN-код. (Wiimote) Я получил эту функцию до сих пор

int main(int argc, char *argv[]) 
{ 
char pin[6]; 
pin[0] = 0x61; 
pin[1] = 0xC7; 
pin[2] = 0x5E; 
pin[3] = 0x00; 
pin[4] = 0x9E; 
pin[5] = 0xCC; 
printf(pin); 
return 0; 
} 

Проблема заключается в том, что я получаю в результате: ヌ^ Является ли это то, что я должен получить? Значение должно быть разным?

Точка зрения, как сказал Дэвид Хольцер, я мог бы найти решение, конвертирующее Hexa в строку?

Спасибо!

+0

Независимо от ответа @ Мохана, вы по-прежнему видеть только три символа. Это шестнадцатеричные значения, только два из которых выглядят типично для печатаемых ASCII. Четвертый ('pin [3]') - это нуль, который завершит вашу строку. Эти данные не предназначены для печати в виде строки. –

+0

MAC-адрес - это 6-байтовый адрес, а не печатная строка. –

+0

Я вижу, поэтому мне нужно преобразовать это шестнадцатеричное значение в строку? который будет отображать что-то нормальное? – orugari

ответ

3

Это то, что вам нужно?

unsigned char pin[6]; // Unsigned ... 
pin[0] = 0x61; 
pin[1] = 0xC7; 
pin[2] = 0x5E; 
pin[3] = 0x00; 
pin[4] = 0x9E; 
pin[5] = 0xCC; 

printf("%02x:%02x:%02x:%02x:%02x:%02x\n",pin[0],pin[1],pin[2],pin[3],pin[4],pin[5]); 

напечатает

61:c7:5e:00:9e:cc 

Объяснение:

%x // Print a number in hexadecimal format using lower case (%X for upper case) 
%2x // Print at least 2 characters (prepend with space) 
%02x // Print at least 2 characters and prepend with 0 

Использование unsigned char pin[6] избежать знака во время печати расширение,. Если вы используете char pin[6] вы получите

61:ffffffc7:5e:00:ffffff9e:ffffffcc 

, который, вероятно, не то, что вы хотите.

Если вы по какой-то причине необходимо использовать char, вы можете сделать:

char pin[6]; 
pin[0] = 0x61; 
pin[1] = 0xC7; 
pin[2] = 0x5E; 
pin[3] = 0x00; 
pin[4] = 0x9E; 
pin[5] = 0xCC; 

printf("%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",pin[0],pin[1],pin[2],pin[3],pin[4],pin[5]); 
      ^^ 
      Force type to char 

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

  • Нет связанных вопросов^_^