将uint8_t 转化为unsigned 类型
使用一元运算符+(和- 运算符对应)
测试代码如下
#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++ 实现中 u int 8_t 是 unsigned char 的 typedef。因此cout 实际调用的函数是 ostream& operator<<(ostream&, unsigned char) ,因此实际的执行结果是 打印 对应的ASCII 码字符,而其字符是不可以 打印 的。 u int 8_t 打印 出来是字符 下面是字符对应的数字, 如果给出一个数字,那么 打印 出来是字符 int BoeHeader::sim_.. #include "std_msgs/U Int 8MultiArray.h" #include "std_msgs/MultiArrayDimension.h" using namespace std; int main( int argc, char **ar 1、通常 打印 u int 8_t 类型 的时候,我们直接使用%u来 打印 。但是更加严谨的做法是使用%hhu来 打印 。详细说明参见cppreference 2、我们new之后,应该对指针进行判空,判断new是否执行成功 很多时候我们会直接这样写Xxx *obj = new Xxx();,但是这样写,当new执行失败后会抛出异常,而不是返回nullptr,所以后续的判空也就是无效的。 正确的写法如下,应该给new标记nothrow,这样出错时就会返回nullptr: 详细参考cppreference #include & 有时候有一个字节的数,比如cv::Mat里的像素值,想按整数输出。但是如果直接static_cast是不行的,因为u int 8_t事实上是unsigned char的type define,所以行为像char一样, 打印 出来也是字符。 然后stackoverflow上就有各种奇葩展现种种招数进行转换,又是模板又是补零又是什么什么,多简单一个需 int arr1[3] = {1, 2, 3}; { } 必须<=3,如果里面有2个数据,最后一个为0 //或者 int arr1[] = {1, 2, 3}; char arr2[3] = {'a' 常规同字节大小的整形转换 同字节大小的整数 类型 ,有符号可以隐式转换为无符号,反之则不行(有警告) #mermaid-svg-kWXXEkGDW25f6EtL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kWXXEkGDW25f6EtL .error-icon{fill:#552222;}#mermaid-svg-kWXXEkGDW25f6EtL .error-text{ /************************************************************************* &amp;gt; File Name: cout_u int 8.cpp &amp;gt; Author: liuce03 &amp;gt; Mail: liuce03@meituan.com &amp;gt; Creat...