【发布时间】:2017-03-21 06:03:58
【问题描述】:
我有一个称为内存的大字节数组,我正在尝试将其中的 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);
【问题讨论】:
-
编译器是否警告过你?
-
我不知道这个...但我在这里发现了类似的问题...stackoverflow.com/questions/4142251/…
-
我没有,不。
-
你是在要求编译器给你警告吗?
-
让我试试
标签: c arrays bitwise-operators bit-shift endianness