我有一个包含一些二进制数据的文件,如下所示。
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 cast 操作来计算相同的值。
val = *(uint64_t*)(data_ptr + ts_offset);
printf("read value %"PRIx64" \n",val);
上面代码的输出是
1bd8921e5ffb6536
如果您在此处检查最低有效 48 位921e5ffb6536
与第一个结果相比,它是倒置的。我使用的是普通的英特尔处理器。为什么会出现这种情况?这是预期的吗。