unsigned char *foo(); std::string str; str.append(static_cast<const char*>(foo()));
invalid static_cast from type ‘unsigned char*’ to type ‘const char*’
What’s the correct way to cast here in C++ style?
char * and
const unsigned char * are considered unrelated types. So you want to use
But if you were going from
const unsigned char* to a non
const type you’d need to use
reinterpret_cast cannot cast away a
unsigned char *foo(); std::string str; str.append(reinterpret_cast<const char*>(foo()));
unsigned char* is basically a byte array and should be used to represent raw data rather than a string generally. A unicode string would be represented as wchar_t*
According to the C++ standard a reinterpret_cast between unsigned char* and char* is safe as they are the same size and have the same construction and constraints. I try to avoid reintrepret_cast even more so than const_cast in general.
If static cast fails with what you are doing you may want to reconsider your design because frankly if you are using C++ you may want to take advantage of what the “plus plus” part offers and use string classes and STL (aka std::basic_string might work better for you)
You would need to use a
reinterpret_cast<> as the two types you are casting between are unrelated to each other.
Hope it help. 🙂
const unsigned attribName = getname(); const unsigned attribVal = getvalue(); const char *attrName=NULL, *attrVal=NULL; attrName = (const char*) attribName; attrVal = (const char*) attribVal;