Похоже, что спецификатор %X
ожидает ввода размером int
, в то время как вы, похоже, передаете ему unsigned char
(не правда ли, что такое uuid[i]
?).
Попробуйте сделать это и посмотрите, поможет ли это:
for (int i = 0; i < 16; i++) {
int temp = uuid[i];
printf("%02X", temp);
}
printf("\n");
Обновление - Новая теория
Хорошо, я внимательно посмотрел на него после прочтения ответа Мэтью.
Проблема memcpy
вместе с (неизвестным) типом uuid
. Вы копируете uint
s поверх uuid
. Первые 4 байта uuid
, как и следовало ожидать, являются младшим порядковым представлением data[0]
.
Теперь одна теория, которая могла бы объяснить остальное, состоит в том, что uint32
на самом деле имеет длину 8 байтов вместо 4, поэтому, когда вы копируете первые 16 байтов data
в uuid
, мы видим в следующем порядке:
- 4 LSB
data[0]
, little-endian
- 4 MSB
data[0]
(мусор)
- 4 LSB
data[1]
, порядковый номер
- 4 MSB
data[1]
(мусор, почему-то все нули)
- И ничего из
data[2]
и data[3]
.
Так что же sizeof(uint32)
равно?