将字节数转换为uint64_t?

时间:2017-03-21 06:03:58

标签: c arrays bitwise-operators bit-shift endianness

我有一大块字节称为内存,我正在尝试将这些字节中的8个转换为uint64_t。我正在尝试用big-endian打印这个数字。

到目前为止,我有这个:

uint64_t value =  (uint64_t)(memory[256]) | //location contains byte 88
   (uint64_t)(memory[257]) << 8  |          //77
   (uint64_t)(memory[258]) << 16 |          //66
   (uint64_t)(memory[259]) << 24 |          //55
   (uint64_t)(memory[260]) << 32 |          //44
   (uint64_t)(memory[261]) << 40 |          //33
   (uint64_t)(memory[262]) << 48 |          //22
   (uint64_t)(memory[263]) << 56;           //11

我这样打印:

printf("0x%x", value);

输出为0x55667788,但我希望输出为0x1122334455667788

有关如何修复上述代码以打印0x1122334455667788

的任何建议

解决方案:print语句必须是:

printf("0x%lx", value);

1 个答案:

答案 0 :(得分:0)

格式说明符%lx有效,因为unsigned long类型在您的系统上至少有64位。 C标准并不能保证64位Microsoft Windows上只有32位。保证unsigned long long至少有64位,所以你可以使用它:

printf("0x%llx\n", (unsigned long long)value);

如果您的编译器和C库支持C99或更高版本的标准,您可以使用<inttypes.h>中定义的宏:

printf("0x%" PRIx64 "\n", value);