我试图将一个 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/