【发布时间】:2020-01-11 08:12:55
【问题描述】:
如何将一个 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。
【问题讨论】:
-
std::hex 没有任何作用?
-
也很容易避免“警告:使用旧式强制转换... } [-Wold-style-cast]">(我相信我们都打开了这个警告! ) 我更喜欢用单行函数(包含强制转换)来转换,比如 "uint scu(uint b) { return static_cast
(b); }" 使用 uint 支持自动提升...所以它只需要一些功能。 -
@2785528
uint scu(uint b) { return static_cast<uint>(b); }完全没用。只需编写静态转换,而不是将它们隐藏在一些不起眼的(可能是错误的)函数后面。