将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{
/*************************************************************************
&gt; File Name: cout_u
int
8.cpp
&gt; Author: liuce03
&gt; Mail: liuce03@meituan.com
&gt; Creat...