Использование шестнадцатеричного представления целого числа полезно, потому что оно проясняет, каково значение каждого байта целого числа. Таким образом, установка
aUnion.raw = 0xabcdef;
означает, что значение младшего байта равно 0xef
, что второй младший байт имеет значение 0xcd
и так далее. Но вы устанавливаете raw
поле union , которое является целым числом, поэтому оно имеет длину 4 байта. В предыдущем представлении наиболее значимый байт отсутствует, поэтому его можно записать как
aUnion.raw = 0x00abcdef;
(это все равно, что сделать явным, что целое число x = 42
имеет 0
сотни, 0
тысячи и т. Д. on).
Ваши поля объединения представляют соответственно a =byte[0]
, b = byte[1]
, c = byte[2]
и d = byte[3]
целого числа raw
, так как в объединении все элементы совместно используют одну и ту же память место . Это верно, потому что вы выполняете свой код в архитектуре с прямым порядком байтов (сначала идут младшие значащие байты).
Итак:
a = byte[0] of raw = 0xef
b = byte[1] of raw = 0xcd
c = byte[2] of raw = 0xab
d = byte[3] of raw = 0x00