В вашем операторе cout
вы приводите (q+i)
к указателю int*
, а затем разыменовываете его, чтобы получить значение int
.Это неправильно, потому что (q+i)
не указывает на int
, и разыменование его как такового превысит границы num
в окружающей памяти, когда i > 0
.
Вам нужно вместо этого разыменовать (q+i)
как есть, чтобы получить unsigned char
, на который он фактически указывает, и затем привести значение TH к [unsigned
] int
(или, по крайней мере, к [unsigned
] short
) при его печати:
cout << hex << static_cast<int>(*(q+i)) << " ";
Кроме того, int
- это не всегда 4 байта во всех системах, поэтому не следует жестко кодировать размер, используйте sizeof(int)
вместо:
for (int i = 0; i < sizeof(num); i++)
Live Demo