Sie haben Recht: In einem 32-Bit-Computer nimmt eine ganze Zahl vier Bytes ein. In C, kann die durch den folgenden Code ausgedrückt werden:
int i = 0x12345678;
int *p_i = &i;`
Wenn p_i
den Wert 0x22fef8
bekommt, dann würde p_i++
0x22fefc
worden, da es auf die nächste ganze Zahl verweisen würde. Wenn Sie sehen wollen, was in den Bytes ist, die i
bilden, benötigen Sie einen anderen Zeiger verwenden:
typedef uint_8 byte;
byte *p_b = (byte *)&i;`
Das bedeutet, dass Sie den Zeiger-to-int ändern, dass &i
darstellt und typisieren es ein Zeiger auf sein -zu-Byte. Es wird immer noch den Wert 0x22fef8
haben, da das ist, wo das erste Byte von i
ist - aber jetzt, wenn Sie eine p_b++
machen, wird es zu 0x22fef9
wechseln. Wenn Sie den ursprünglichen Wert *p_b
(das Byte, auf das es verweist) ausgeben, wird es nicht denselben Wert als i
geben. Abhängig vom Computer wird entweder das erste Byte oder das letzte Byte ausgedruckt: 0x12
oder 0x78
, oder zumindest die Dezimalversionen davon.
Dies liegt an der "Endianness" des Computers, die sich auf die Speicherung von Multi-Byte-Werten auswirkt. Little-Endian-Computer wie der x86 speichern den kleinsten Teil des Wertes zuerst - der 0x78
- während Power PC-Computer den größten Teil des Wertes zuerst speichern - 0x12
.
bekommen Wenn eine ganze Zahl vier Bytes nimmt, dann enthalten diese vier Bytes, die die ganze Zahl. Was ist das Geheimnis? –