C ++风格从无符号char *转换为const char *

我有:

unsigned char *foo(); std::string str; str.append(static_cast<const char*>(foo())); 

错误: invalid static_cast from type 'unsigned char*' to type 'const char*'

C ++风格的正确方法是什么?

reinterpret_cast的

char *const unsigned char *被认为是无关的types。 所以你想使用reinterpret_cast

但是如果你从const unsigned char*到非consttypes,你需要首先使用const_castreinterpret_cast不能丢弃一个constvolatile资格。

尝试reinterpret_cast

 unsigned char *foo(); std::string str; str.append(reinterpret_cast<const char*>(foo())); 

无符号字符*基本上是一个字节数组,应该用来表示原始数据而不是string。 一个unicodestring将被表示为wchar_t *

根据C ++标准,unsigned char *和char *之间的reinterpret_cast是安全的,因为它们具有相同的大小,并且具有相同的构造和约束。 一般来说,我尽量避免使用reintrepret_cast。

如果静态转换失败,你可能想要重新考虑你的devise,因为坦率地说,如果你正在使用C ++,你可能需要利用“plus plus”部分提供的东西,并使用string类和STL(又名std :: basic_string可能会更好地为你工作)

你需要使用reinterpret_cast<>因为两个types之间的关系是互不相关的。

希望它有帮助。 🙂

 const unsigned attribName = getname(); const unsigned attribVal = getvalue(); const char *attrName=NULL, *attrVal=NULL; attrName = (const char*) attribName; attrVal = (const char*) attribVal;