数据类型
- 枚举类型enum
enum MotorIndex {
kLeftMotor = 0,
kRightMotor = 1,
};
枚举常量必须是整数类型,可以当变量直接使用。
- struct结构
struct MotorStatus {
float current;
int16_t temperature;
int16_t temperature_MCU;
int16_t rpm;
int32_t counter;
int32_t counter_offset;
uint8_t status;
bool counter_reset;
//类变量初始化
MotorStatus() :
rpm(0), counter(0), status(0), counter_reset(false)
{
}
};
MotorStatus motorstatus[2];
motorstatus[0].current = 0;
- size_t
使用size_t可能会提高代码的可移植性、有效性或者可读性。
例:
size_t size=sizeof(i);//用sizeof操作得到变量i的类型的大小,
有时候会使用unsigned int,但是它有可能会影响设备的性能。
常见类型转换
-
static_cast
与dynamic_cast
:
前者提供的是编译时期的静态类型检测,后者提供的是运行时检测.dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全
static_cast
: 1)完成基础数据类型,2)同一个继承体系中类型的转换 3)任意类型与空指针类型void*之间的转换。
dynamic_cast
:使用多态的场景,增加了一层对真实调用对象类型的检查 -
const_cast
用于取出const属性,把const类型的指针变为非const类型的指针, -
reinterpret_cast
数据的二进制形式重新解释,但是不改变其值。这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。
如:
int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);
static_cast<int>()....类似
- c_str()
string.c_str()返回字符串指针 (ROS_INFO中经常用来输出%s) strcpy
和memcpy
strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
这两个函数也可以作为类型转换的使用。- atoi()和stoi()
atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_str()的方法把这个string转换成 const char类型的,而stoi()的参数是const string,不需要转化为 const char*;
stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error
而atoi()不会做范围检查,如果超出范围的话,超出上界,则输出上界,超出下界,则输出下界 - to_string()
std::to_string(1);
将数值转化为字符串。返回对应的字符串。
字符串分割
- strtok函数
buf_spilt[0] = strtok(buf_c, delim1);
data_n = strtok(NULL, delim1);