读二进制整数

XTF*_*XTF 8 c++ c++11

const unsigned char* p;
int64_t u = ...; // ??
Run Code Online (Sandbox Code Playgroud)

从p指向的8个字节读取64位二进制小端整数的推荐方法是什么?在x64上,单个机器指令应该这样做,但是在大端硬件上需要交换.如何以最佳和便携的方式做到这一点?

Carl的解决方案很好,便携但不是最佳.这引出了一个问题:为什么C/C++没有提供更好和标准化的方法来做到这一点?这不是一个不常见的结构.

Car*_*rum 7

常见的:

u = (int64_t)(((uint64_t)p[0] <<  0)
  + ((uint64_t)p[1] <<  8)
  + ((uint64_t)p[2] << 16)
  + ((uint64_t)p[3] << 24)
  + ((uint64_t)p[4] << 32)
  + ((uint64_t)p[5] << 40)
  + ((uint64_t)p[6] << 48)
  + ((uint64_t)p[7] << 56));
Run Code Online (Sandbox Code Playgroud)

几乎是镇上唯一可移植的游戏 - 否则很难避免潜在的对齐问题.

这个答案确实假定为8位char.如果您可能需要支持不同大小的chars,则需要一个预处理器定义来检查CHAR_BIT并为每个定义做正确的事情.