在C语言中,unsigned char*和char*之间可以进行隐式转换:
char buffer[2048] = {"hello world!"};
unsigned char* p;
p = buffer; //编译器不报错
但在C++中,unsigned char*和char*之间不可以进行隐式转换:
char buffer[2048] = {"hello world!"};
unsigned char* address_mac = nullptr;
address_mac = buffer; //不能将 "char *" 类型的值分配到 "unsigned char *" 类型的实体
unsigned char buffer[2048] = { "hello world!" };
char* address_mac = nullptr;
address_mac = buffer; //不能将 "unsigned char *" 类型的值分配到 "char *" 类型的实体
在C++中实现该转化的方法:
1.使用C语言原生的强制类型转换:
char buffer[2048] = {"hello world!"};
unsigned char* address_mac = nullptr;
address_mac = (unsigned char*)buffer; //编译器不报错
2.使用C++11标准中新增的reinterpret_cast:
char buffer[2048] = {"hello world!"};
unsigned char* address_mac = nullptr;
address_mac = reinterpret_cast<unsigned char*>(buffer); //编译器不报错
需要注意的是,C++11标准中新增的static_cast会将该转换视为无效的转换:
char buffer[2048] = {"hello world!"};
unsigned char* address_mac = nullptr;
address_mac = static_cast<unsigned char*>(buffer); //类型转换无效