如何将uint16_t更改为两个uint8_t?

Ska*_*nda 0 c++ bit-shift masking

如何将一个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;
Run Code Online (Sandbox Code Playgroud)

对于上面的代码,我用partAas qpartBas 3代替0x71and 0x33

for*_*818 5

将a uint8_t放入cout将显示operator<<(const char&)字母的领料中,q而71和33恰好是和的ascii码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;
Run Code Online (Sandbox Code Playgroud)

std :: hex没有任何作用

它确实有影响,但对字母没有影响。没有适用于的十六进制格式q。选择打印数字的重载后,数字将打印为十六进制。

PS:我将您的c样式强制转换为static_casts。C样式转换是一个危险信号,它们应该使您感到恐慌,因为大多数情况下,它们只是隐藏一个错误。