Eclipse中C++拆分uint16_t为uint8_t后cout打印出现问号如何解决
问题原因分析
- 核心原因是
uint8_t在绝大多数C编译器实现中,是unsigned char的别名。C标准库的cout输出char/unsigned char/signed char类型变量时,默认会将其作为ASCII字符处理,而非整数值。 - 你拆分出的两个字节对应的数值分别是高字节
0x96(十进制150)、低字节0xD7(十进制215),二者都超出了ASCII可打印字符的范围(0~127),因此终端会将其渲染为不可识别的问号符号。
解决方法
输出时将uint8_t类型的变量强制转换为整数类型即可触发数值打印逻辑,示例修改后的代码如下:
#include <iostream> #include <cstdint> // 标准写法需要包含该头文件获取uint16_t、uint8_t定义 using namespace std; int main() { uint16_t num1 = 38615; uint8_t num2 = (num1 & 0XFF); uint8_t num3 = ((num1 & 0XFF00) >> 8); cout << static_cast<unsigned int>(num3) << endl; cout << static_cast<unsigned int>(num2) <<endl; return 0; }
运行后将输出预期的两个整数值:150和215。
内容的提问来源于stack exchange,提问作者user15356606
相关产品推荐
相关产品推荐

