如何将一个uint16_t转换为两个部分?
uint16_t value = 0x7133;
uint8_t partA = (uint8_t)((value & 0xFF00) >> 8);
uint8_t partB = (uint8_t)(value & 0x00FF);
std::cout << std::hex << partA << std::endl;
std::cout << std::hex << partB << std::endl;
对于上面的代码,我得到partA
为q
,partB
为3
,而不是0x71
和0x33
。
答案 0 :(得分:5)
将uint8_t
放入cout
中将得到operator<<(const char&)
,该q
会打印字母,而71和33恰好是3
和uint16_t value = 0x7133;
uint8_t partA = static_cast<uint8_t>((value & 0xFF00) >> 8);
uint8_t partB = static_cast<uint8_t>(value & 0x00FF);
std::cout << std::hex << static_cast<int>(partA) << std::endl;
std::cout << std::hex << static_cast<int>(partB) << std::endl;
的ASCII码。如果要查看数字,则必须使其选择不同的重载:
q
std :: hex没有任何作用
它确实有影响,但对字母没有影响。没有为static_cast
应用十六进制格式。一旦选择了打印数字的重载,数字将被打印为十六进制。
PS:我将您的C风格演员表更改为InternetExplorerOptions capabilities = new InternetExplorerOptions();
capabilities.ignoreZoomSettings();
driver = new InternetExplorerDriver(capabilities);
。 C样式强制转换是一个危险信号,它们应该使您感到恐慌,因为大多数情况下它们只是隐藏一个错误。
答案 1 :(得分:1)
您正在以正确的方式进行转换。令人困惑的输出是uint8_t
与平台上的char
类型相同的结果。尝试将代码更改为
std::cout << std::hex << (uint16_t)partA << std::endl;
std::cout << std::hex << (uint16_t)partB << std::endl;
然后您将看到
71
33