Ecrire Hex en C (octet)

Je dois écrire un octet au format hexadécimal dans un fichier, mais j’ai un problème. Par exemple.

Si j’ai:

unsigned char a = 0x0; 

et j’écris dans un fichier en utilisant fwrite:

 FILE *fp = fopen("file.txt",wb); fwrite(&a,sizeof(unsigned char),1,fp); fclose(fp); 

Quand j’ouvre un fichier, je vois toujours 20h, pourquoi pas 00h?

Alors, j’essaie d’utiliser:

 fprintf(fp,"%x",a); 

Dans ce cas, je vois 0h, mais j’ai besoin d’un octet complet, pas d’un quartet. Que devrais-je faire?

Le premier exemple est difficile à croire, il devrait générer un fichier avec un seul octet contenant la valeur 0. Ce n’est pas vraiment un fichier texte, alors je suppose que vos outils pourraient vous tromper.

La deuxième tentative est préférable, en supposant que vous souhaitiez un fichier texte avec une représentation textuelle de la valeur qu’il contient. Pour en faire deux chiffres hexadécimaux, spécifiez une largeur et un remplissage:

 fprintf(fp, "%02x", a); 

Veuillez noter qu’il n’existe pas de “valeur hexadécimale”. Une valeur est une valeur; il peut être représenté sous forme hexadécimale, mais cela ne fait pas partie de la valeur. 100 décimales est la même chose que 64 en hexadécimal et 1100100 en binary. La base ne compte que pour représenter le nombre sous forme de chaîne de chiffres, le nombre lui-même ne peut pas être “hex”.