c++ - 将 2 字节数分成两个 1 字节

标签 c++ binary bit-manipulation bit-shift

我试图将一个 2 字节的数字分成两个 1 字节的数字。但是我得到了错误的结果。假设数字是:0x1234H

uint8_t high = 0;
uint8_t low = 0;

high = static_cast<uint8_t >(val & 0xFF);
low = static_cast<uint8_t >(val >> 8);

cout << std::bitset<8>(high) << endl;
cout << std::bitset<8>(low) << endl;

cout << "high byte: " << static_cast<int >(high) << endl;
cout << "low byte: " << static_cast<int >(low) << endl;

当我运行代码时,我希望得到以下输出:

0x1234
00001100
00010010
high byte: 12
low byte: 34

然而我却得到了,

0x1234
00110100
00010010
high byte: 34
low byte: 12

为什么我的尝试失败了?

最佳答案

那是因为你在这些行中错误地命名了变量...

high = static_cast<uint8_t >(val & 0xFF);
low = static_cast<uint8_t >(val >> 8);

>>> 运算符将位从高位位置向下移动到低位位置。如果您必须将这些位向下移动以保留它们(在转换中),那是因为它们最初不是低位。所以……

low = static_cast<uint8_t >(val & 0xFF);
high = static_cast<uint8_t >(val >> 8);

顺便说一句 - 当您转换为 uint8_t 时,按位和运算符是多余的 - 这已经足以丢弃除低字节以外的所有字节。它仍然是正确的,只是没有必要。

关于c++ - 将 2 字节数分成两个 1 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873623/

相关文章:

c++ - 为什么 OpenCV(@Banana Pi,Raspbian)中的全屏窗口分辨率会减慢相机镜头并使其滞后?

java - 使用 Java 对整数执行位改组的更快方法

python - 在 Python 中将二进制文件转换为 ascii

从二进制文件的十六进制表示创建二进制文件的副本

c - 将二进制数据 append 到c中的文件

algorithm - 找出三个数字只出现一次

c - 仅使用按位运算符实现逻辑非(除了!)

c++ - 具有多个数组的 typedef 数组

c++ - 错误 : invalid initialization of non-const reference of type 'cv::Mat&'

c++ - _stricmp with mingw 和 c++0x 不存在?