6 ответов:
char *иconst unsigned char *считаются несвязанными типами. Так что вы хотите использоватьreinterpret_cast.но если бы вы шли от
const unsigned char*доconstтип вам нужно использоватьconst_castпервый.reinterpret_castне может отбросить aconstилиvolatileквалификация.
попробовать
reinterpret_castunsigned char *foo(); std::string str; str.append(reinterpret_cast<const char*>(foo()));
unsigned char* в основном является массивом байтов и должен использоваться для представления необработанных данных, а не строки в целом. Строка Юникода будет представлена как wchar_t*
согласно стандарту C++ reinterpret_cast между unsigned char* и char* безопасен, поскольку они имеют одинаковый размер и имеют одинаковую конструкцию и ограничения. Я стараюсь избегать reintrepret_cast даже больше, чем const_cast в целом.
Если статическое приведение не удается с тем, что вы делаете вы возможно, вы захотите пересмотреть свой дизайн, потому что, честно говоря, если вы используете C++ , вы можете воспользоваться тем, что предлагает часть "плюс плюс", и использовать классы строк и STL (aka std::basic_string может работать лучше для вас)
вам нужно будет использовать
reinterpret_cast<>поскольку два типа, между которыми вы проводите кастинг, не связаны друг с другом.
надеюсь, что это поможет. :)
const unsigned attribName = getname(); const unsigned attribVal = getvalue(); const char *attrName=NULL, *attrVal=NULL; attrName = (const char*) attribName; attrVal = (const char*) attribVal;
Comments