printf le dernier octet d’une valeur hexadécimale en C

J’ai une question simple. Le code est vraiment court alors je le poste ici

#include  int main(int argc, const char * argv[]) { long int p; printf("FYI: address of first local varaible of main() on the function stack:%p\n",&p); printf("Enter start address  of dump:"); scanf("%lx",&p); char * q; q = (char*)p; printf("%x\n",*q); return 0; } 

Le résultat de la dernière impression, par exemple, est ffffffc8. Et si je veux seulement garder les deux derniers: c8. Comment puis je faire ça? J’ai essayé: printf("%2x",*q); et printf("%x",*q % 256); Mais ni fonctionne. Quelqu’un peut-il aider? Merci!

Pour imprimer l’octet le moins significatif de *q au format hexadécimal, vous pouvez utiliser:

 printf("%02x", *q & 0xFF); 

Bien entendu, cela suppose que q peut être déréférencé.

Tout d’abord convertir en non signé:

 unsigned char q = *(unsigned char *)(p); printf("%02X", q); 

(Sinon, si votre caractère est signé, la promotion par défaut variadique convertit la valeur en int et le résultat peut être négatif.)