如何把uint16_t改成两个uint8_t?

How to change uint16_t to two uint8_t?

如何将一个 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 作为 qpartB 作为 3 而不是 0x710x33

uint8_t 放入 cout 得到选择的 operator<<(const char&) 打印字母和 71 和 33 恰好是 q 和 [=15= 的 ascii 代码].如果你想看到这个数字,你必须让它选择一个不同的重载:

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;

std::hex does not have any effect

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

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

您正在以正确的方式进行转换。令人困惑的输出是 uint8_t 与您平台上的 char 类型相同的结果。尝试将您的代码更改为

  std::cout << std::hex << (uint16_t)partA << std::endl; 
  std::cout << std::hex << (uint16_t)partB << std::endl;

你会看到

71
33