[英]Convert array of bytes to uint64_t?
我有一个大的字节数组称为内存,我正在尝试将这些字节中的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);
格式说明符%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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.