将字节数组转换为 uint64_t?
Convert array of bytes to uint64_t?
我有一大堆称为内存的字节,我正在尝试将其中的 8 个字节转换为 uint64_t。我正在尝试以大端格式打印数字。
到目前为止我有这个:
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
?
解决方案:打印语句需要为:
printf("0x%lx", value);
格式说明符 %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);
我有一大堆称为内存的字节,我正在尝试将其中的 8 个字节转换为 uint64_t。我正在尝试以大端格式打印数字。
到目前为止我有这个:
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
?
解决方案:打印语句需要为:
printf("0x%lx", value);
格式说明符 %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);