c++ cout 不能正常打印uint8

编程入门 行业动态 更新时间:2024-10-26 23:28:21

c++ cout <a href=https://www.elefans.com/category/jswz/34/1769353.html style=不能正常打印uint8"/>

c++ cout 不能正常打印uint8

问题现象

编译运行以下代码

/*************************************************************************
    > File Name: cout_uint8.cpp
    > Author: ce39906
    > Mail: ce39906@163.com
    > Created Time: 2018-06-29 13:50:53************************************************************************/
#include <cstdint>
#include <iostream>int main()
{
    std::uint8_t uint8_num = 10;
    std::cout << "uint8_t num is " << uint8_num << std::endl;
    return 0;
}

编译

g++ cout_uint8.cpp --std=c++11 -o cout_uint8

运行得到的输出如下

cout没有正确打印数字10
产生这种情况的原因是很多c++ 实现中 uint8_tunsigned chartypedef。因此cout 实际调用的函数是 ostream& operator<<(ostream&, unsigned char) ,因此实际的执行结果是打印对应的ASCII 码字符,而其字符是不可以打印的。

解决方案

uint8_t 转化为unsigned 类型
使用一元运算符+(和- 运算符对应)
测试代码如下

/*************************************************************************
    > File Name: cout_uint8.cpp
    > Author: ce39906
    > Mail: ce39906@163.com
    > Created Time: 2018-06-29 13:50:53************************************************************************/
#include <cstdint>
#include <iostream>
#include <typeinfo>int main()
{
    std::uint8_t uint8_num = 10;
    std::cout << "uint8_t num is " << uint8_num << std::endl;
    std::cout << "after cast to unsigned, uint8_t num is " << unsigned(uint8_num) << std::endl;
    std::cout << "with a unary + operator, uint8_t num is " << +uint8_num << std::endl;
    std::cout << "type of '+uint8_num' is " << typeid(+uint8_num).name() << std::endl;
    return 0;
}

运行结果如下

可见使用+运算符的原理也是进行类型转换(把uint8_t 转为 int)

更多推荐

c++ cout 不能正常打印uint8

本文发布于:2023-07-03 09:23:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1004386.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不能正常   cout

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!