编译运行以下代码

/*************************************************************************
    > 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

运行得到的输出如下
avatar
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;

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

写算法题的时候突然发现自己忘记基本的C++cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看。 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进制输出整数,输出浮点数时保留小数点后面两位,输出整数时按 6 个数字的宽度输出,宽度不足时左边补 0,等等。C语言中的 printf() 函数使用以%开头的格式控制符,例如 %X、%.2f、m 等;C++ 中的 cout 对象则使用流操作算子(你也可以叫做格式控制符)或者成员函数进行控制。 使用流操作算子 C++ 中常用的输出流操纵算子如表 1 所示,它们都是在头文件 iomanip 中定义的 今天在测试程序时发现,发现一直打印不出某些数据,检查了好多遍,没有发现问题。经过多次测试,发现凡是uint8_t和int8_t的数据,都无法用std::cout打印出来。随后写个小程序测试了一下,发现确实如此。查过资料才明白,其中的原因。不得不说是个好坑。。。 #include<iostream> int main() uint8_t a = 10; int8_t b = 5; std::cout << "uint8_t a: " << a & 在C++中我们一般用std::cout输出到屏幕,但如果直接用cout输出uint8_t类型的无符号整形数的话却不能得到我们想到的整形值,比如下例代码:#include <iostream> #include <stdint.h> int main(){ uint8_t a = 98; std::cout << a << std::endl; return 0; }我们希望输 产生这种情况的原因是很多c++ 实现中 uint8_t 是 unsigned char 的 typedef。因此cout 实际调用的函数是 ostream& operator<<(ostream&, unsigned char) ,因此实际的执行结果是打印对应的ASCII 码字符,而其字符是不可以打印的。 uint8_t 打印出来是字符 下面是字符对应的数字, 如果给出一个数字,那么打印出来是字符 int BoeHeader::sim_.. 1. 简介 标准库队列使用了先进先出(FIFO)的存储和检索策略. 进入队列的对象被放置在尾部, 下一个被取出的元素则取自队列的首部. 标准库提供了两种风格的队列: FIFO 队列(FIFO queue, 简称 queue), 以及优先级队列(priority queue). priority_queue 允许用户为队列中存储的元素设置优先级. 这种队列不是直接将新元素放置在队列尾部, 而是放在比它优先级低的元素前面. 标准库默认使用元素类型的 “<” 操作符来确定它们之间的优先级关系. 如需改变大小关系, 需要使用std::g 在测试一行函数时,出现std::cout不能输出的情况,找不到原因。          只好从main函数第一行,开始测试,直到发现一个函数 o_Initer.ekf_filter(filter, x_k_k,p_k_k, sigma_a, sigma_alpha, sigma_image_noise, o_Initer.gSVOC );             函数体包含了: