如何将信息转换为字节流
reinterpret_c
将一种类型的地址转为另一种类型的地址
将地址转换为数值,比如转换为整数
语法:reinterpret_cast<dataType>(adress)
- adress是待转换的数据的起始地址
- dataType是要转至的目标类型
- 对于二进制I/O来说,dataType是char*
e.g:
long int x{0};
int a[3] {21,42,63};
std::string str{"Hello"};
char* p1 = reinterpret_cast<char*>(&X); //variable adress
char* p2 = reinterpret_cast<char*>(a); //array adress
char* p3 = reinterpret_cast<char*>(&str); //object adress
const_cast
将常量指针或引用转化为非常量的指针或引用,仍然指向原来的对象
语法:const_cast<dataType>(expression)
e.g.1:
int arr[3] {1, 2, 3};
const int* p = arr;
p[1] = 0; //error
int* pa = const_cast<int*>(p);
pa[0] = 6; //OK
static_cast
作用和C风格字强制类型转换相似,运行时不会检查安全性
在类的指针转换时,上转是安全的,下转没有动态类型检查,不安全
隐式转换是使用的static_cast
语法:static_cast<dataType>(expression)
e.g.
double a = 2.3;
int b = static_cast<int>(a);
dynamic_cast
将操作数expression转换为dataType类型的对象,其中,dataType必须是类的指针、引用或是void*类型
语法:dynamic_cast<dataType>(expression)