С++ стиль от unsigned 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*’

Каков правильный способ использования здесь в стиле С++?

Ответ 1

reinterpret_cast

Ответ 2

char * и const unsigned char * считаются несвязанными типами. Поэтому вы хотите использовать reinterpret_cast.

Но если вы переходите от const unsigned char* к типу non const, вам нужно сначала использовать const_cast. reinterpret_cast не может отбросить квалификацию const или volatile.

Ответ 3

Попробуйте reinterpret_cast

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

Ответ 4

unsigned char * является в основном байтовым массивом и должен использоваться для представления необработанных данных, а не строки в целом. Строка Unicode будет представлена ​​как wchar_t *

В соответствии со стандартом С++ reinterpret_cast между unsigned char * и char * безопасен, поскольку они одного размера и имеют одну и ту же конструкцию и ограничения. Я пытаюсь избежать reintrepret_cast еще больше, чем const_cast в целом.

Если статическое приведение не выполняется с тем, что вы делаете, вы можете захотеть пересмотреть свой дизайн, потому что, откровенно говоря, если вы используете С++, вы можете воспользоваться преимуществами части "плюс плюс" и использовать строковые классы и STL (aka std:: basic_string может работать лучше для вас)

Ответ 5

Вам нужно будет использовать reinterpret_cast<>, поскольку два типа, которые вы выполняете, не связаны друг с другом.

Ответ 6

Надеюсь, что это поможет.:)

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