如何把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
作为 q
和 partB
作为 3
而不是 0x71
和 0x33
。
将 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_cast
s。 C 风格的强制转换是一个危险信号,它们应该让您感到恐慌,因为大多数情况下它们只是隐藏了一个错误。
您正在以正确的方式进行转换。令人困惑的输出是 uint8_t
与您平台上的 char
类型相同的结果。尝试将您的代码更改为
std::cout << std::hex << (uint16_t)partA << std::endl;
std::cout << std::hex << (uint16_t)partB << std::endl;
你会看到
71
33
如何将一个 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
。
将 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_cast
s。 C 风格的强制转换是一个危险信号,它们应该让您感到恐慌,因为大多数情况下它们只是隐藏了一个错误。
您正在以正确的方式进行转换。令人困惑的输出是 uint8_t
与您平台上的 char
类型相同的结果。尝试将您的代码更改为
std::cout << std::hex << (uint16_t)partA << std::endl;
std::cout << std::hex << (uint16_t)partB << std::endl;
你会看到
71
33