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*
到非const
types,你需要首先使用const_cast
。 reinterpret_cast
不能丢弃一个const
或volatile
资格。
尝试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;