我试图将一个16位变量拆分为两个8位字节,但我编写的代码似乎无法正常工作:
#include <iostream>
using namespace std;
int main() {
uint16_t value = 0x1234;
uint8_t high = (uint8_t)((value & 0xFF00) >> 8);
uint8_t low = (uint8_t)(value & 0x00FF);
cout<<"higher is "<<hex<<high<<endl;
cout<<"lower is "<<hex<<low<<endl;
return 0;
}
当变量high和low被声明为uint8_t时,结果是不正确的。然而,当我将这两个变量声明为uint16_t时,它们的结果是正确的。请帮助我理解为什么会出现这种情况,或者如何将这两个字节存储为uint8_t变量。谢谢
当变量high和low被声明为uint8_t时,结果是不正确的。
;结果";分割的是正确的。
输出可能与您预期的不同,因为std::uint8_t
是字符类型(unsigned char
(的别名,字符流对字符类型的处理与其他整数类型不同。您可以通过转换为其他整数类型来获得数字表示形式。示例:
std::cout << "higher is " << std::hex << static_cast<unsigned>(high) << 'n';
p.S.";高";以及";"低";在这种情况下是模棱两可的。我建议改为调用最高/更重要的八位位组和最低/不重要的八位组。你称之为";高";实际上可能是较低内存地址中的字节(这取决于系统,但在小端序的x86系统上就是这样(。