2016-01-13 2 views
3

Je ne fais absolument pas de C, mais pour une petite chose, je dois faire une fonction très simple. J'ai du mal à comprendre le résultat.Ouptut PIN à partir d'une adresse MAC en utilisant char

J'ai une adresse MAC et j'ai besoin de sortir le code PIN. (Wiimote) Je suis arrivé cette fonction jusqu'à

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; 
} 

problème est que je reçois comme résultat: un ヌ^ Est-ce que je suis censé faire? La valeur devrait être différente? Le point que David Hoelzer a dit, je pourrais trouver une solution convertissant Hexa en chaîne?

Merci!

+0

Quelle que soit la réponse de @ Mohan, vous pourrez toujours voir que trois caractères. Ce sont des valeurs hexadécimales, dont seulement deux semblent être ASCII imprimable typique. Le quatrième ('pin [3]') est un null, ce qui terminera votre chaîne. Ces données ne sont pas destinées à être imprimées en tant que chaîne. –

+0

Un MAC est une adresse de 6 octets, pas une chaîne imprimable. –

+0

Je vois, donc j'ai besoin de convertir cette valeur hexadécimale en une chaîne? qui va afficher quelque chose de normal? – orugari

Répondre

3

Est-ce ce que vous cherchez?

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]); 

imprimera

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

Explication:

%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 

Utilisez unsigned char pin[6] pour éviter signe extention pendant l'impression. Si vous utilisez char pin[6] vous obtiendrez

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

qui est probablement pas ce que vous voulez.

Si pour une raison quelconque besoin d'utiliser char, vous pouvez le faire:

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