come leggere i byte di memoria uno per uno in esadecimale (quindi senza alcun formato) con printf ()

Sono interessato a leggere un byte di memoria in C.Im utilizzando netbeans su ubuntu e sotto è il mio codice per leggere solo un byte (non l’intero valore di a). ma nulla viene stampato sullo schermo.

main() { int a[1]={3}; //printf(%d",a[0]); //line 2 printf("\x07",a[0]); //line 3 } 

nella mia idea, la memoria in indirizzo con etichetta a è composta da:

  • 0x0004 03
  • 0x0008 00
  • 0x000c 00
  • 0x000f 00

L’istruzione printf () nella riga 2 indica che andare all’indirizzo 0x ??? 4 e:

  1. leggi 4 byte (a causa del carattere d)
  2. Rappresentano questi 4 byte come un numero che significa che li moltiplicano per la potenza di 2 (a causa del carattere d)

L’istruzione printf () nella riga 3 usa \ (e non%) e bit da 0 a 7 (1 byte). quindi indica che, vai all’indirizzo 0x0004 e:

  1. Elemento dell’elenco
  2. leggi 1 byte (a causa di 07 caratteri) 2-Non fare nulla tranne che mostrare ogni 4 bit come valore esadecimale

quindi il codice dovrebbe stampare quale sia il primo byte in 0x0004 che è 03. ma non lo è. qualche indizio?

Grazie in anticipo

Per favore, non correggere solo la mia syntax. Pensi che le mie ipotesi siano corrette riguardo i formattatori di printf?

Usa un puntatore per indirizzare i singoli byte di ae cambia il tuo printf per usare lo specificatore di formato %x , ad esempio:

 int main(void) { int a = 3; unsigned char *p = (unsigned char *)&a; int i; printf("a ="); for (i = 0; i < sizeof(a); ++i) { printf(" %02x", p[i]); } printf("\n"); return 0; } 

Su una macchina little endian con 32 bit int questo dovrebbe produrre il seguente output:

 a = 03 00 00 00 
 main() { int a = 3; // you can use any type you need. size_t size = sizeof(a); char *phead = malloc(size); memcpy(phead,&a,size); size_t i; char *p = phead; for(i = 0; i < size; i++) printf("%02x ",*p++); free( phead); } 

printf ha un formatter esadecimale. È “% x” …

 $ man 3 printf 

Come sopra, ma uno che funzionerà con interi a 64 bit.

 #include  #include  int main(void) { int64_t i, asz, a = 3; unsigned char *p = (unsigned char *)&a; printf("a = 0x"); for (i = 0, asz = sizeof(a); i < asz; ++i) { printf("%02x ", p[i]); } printf("\n"); return 0; }