У меня есть файл с некоторыми двоичными данными следующим образом.
aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55
aa 55 aa 55 36 65 fb 5f 1e 92 d8 1b 55 f7 fb 5f
1e 92 d8 1b
Я хочу извлечь значения 55 36 65 fb 5f 1e
.
Если я использую следующий код.
temp_1 = (data_ptr[offset]);
val = temp_1 << 40;
temp_1 = (data_ptr[offset + 1]);
val |= temp_1 << 32;
temp_1 = (data_ptr[offset + 2]);
val |= temp_1 << 24;
temp_1 = (data_ptr[ts_offset + 3]);
val |= temp_1 << 16;
temp_1 = (data_ptr[ts_offset + 4]);
val |= temp_1 << 8;
temp_1 = (data_ptr[ts_offset + 5]);
val |= temp << 0;
printf("read value %"PRIx64" \n",val);
Результат этого printf
3665fb5f1e92
Теперь я также пытаюсь вычислить то же значение, используя одну 64-битную операцию приведения ptr.
val = *(uint64_t*)(data_ptr + ts_offset);
printf("read value %"PRIx64" \n",val);
Вывод приведенного выше кода
1bd8921e5ffb6536
Если вы отметите младшие 48 бит здесь 921e5ffb6536
Это инвертированный результат по сравнению с первым результатом. Я использую обычный процессор Intel. Почему такое поведение? Ожидается ли это.