假设第一个字节 = 2 (dec),第二个字节 = 1 (dec)。
因此,第一个字节代表 257(十进制)。 因此第二个字节代表 1 (dec)。
所以(总的)16 位值是 258(dec)。
如果我这样做:
(byte1*256)+byte2
这是“正确”的方式吗?或者有更好的方法吗?
谢谢,
最佳答案
对于大多数现代优化器,没有“正确”的方法来做到这一点:您的代码将被转换为您系统上最快的代码,其中可能包括
- 将字节分别加载到下部和上部部分寄存器 - 没有进行任何转换,字节直接加载到它们各自的位置。
- 位移最高字节并在较低字节中进行 OR 运算 - 类似于
byte1<<8 | byte2
- 移动最高字节并添加较低字节 - 与上面相同,除了
+
而不是|
- 在您的系统上快速运行的完全不同的东西 - 不同的架构可能具有上面未描述的特定于架构的优化。
在您的源代码中,您应该集中精力让人类读者清楚地了解您的意图:如果它乘以 256
这对你的读者来说最有意义,然后使用乘法;如果是位移位,则使用位移位。编译器将负责使您的代码尽可能高效。
关于c++ - 将两个字节转换为 16 位值的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962156/