J'apprends le pointeur dans c et j'ai ce programme que je prends d'un livre comme exemple.Pointer et représentation entière en mémoire
void print_bytes(void *start, size_t size);
int main(int argc, char *argv[])
{
int val = 42;
print_bytes(&val ,sizeof(val));
return 0;
}
void print_bytes(void *start, size_t size)
{
int i = 0;
for(i = 0; i < size; i++)
{
printf("%02X ", *((unsigned char *)start + i));
}
}
Je suis en train d'imprimer la valeur de chaque octets au format hexadecimal
pointé par start pointer
variable dans la fonction print_bytes.
Pour autant que je sais quand un integers
variables sont stockées dans la mémoire, les variables sont stockées au format binaire.
Ceci est mon analyse si i exécuter le code: Supposons que le sizeof une variable entière est 4 bytes (32 bits)
puis si la mémoire maintenir une valeur entière 42 alors la représentation en mémoire est la suivante:
42 pouvant servir qu'à en premier 8 représentation bit d'octets en mémoire.
binaire: 00000000
00000000
00000000
00101010
donc si je lance le code que je suis 2A
. Jusqu'à présent, la sortie est correcte.
si la mémoire maintenir une valeur de nombre entier supérieur à 42, supposons 3000 (ce qui est certainement besoin de plus d'un seul octets pour représenter la valeur binaire dans la mémoire), la représentation en mémoire est la suivante:
binaire: 00000000 00000000 00001011 10111000
Si je cours le code j'ai obtenu 'B8 0B 00 00' qui me semble mal inséré BB 80 00 00
.
S'il vous plaît quelqu'un expliquer ce qui ne va pas, je suis tryting pour résoudre ce pendant des heures, mais pas la moindre idée.
Merci d'avance. J'apprécierai chaque réponse et j'essaierai d'apprendre d'eux.
S'il vous plaît lire ceci au sujet de [boutisme] (https://en.wikipedia.org/wiki/Endianness). –
Vous avez fait un oubli dans le premier exemple en utilisant '42'. Le programme n'a pas simplement imprimé '2A' comme vous le dites, il a imprimé' 2A 00 00 00'. C'est-à-dire, l'octet le moins significatif en premier. –