unsigned char * в основном представляет собой массив байтов и должен использоваться для представления необработанных данных, а не строки в целом. Строка unicode будет представлена как wchar_t *
Согласно стандарту C++ reinterpret_cast между unsigned char * и char * безопасен, поскольку они имеют одинаковый размер и имеют ту же конструкцию и ограничения. Я пытаюсь избежать reintrepret_cast даже больше, чем const_cast в целом.
Если статическое приведение не выполняется, вы можете пересмотреть свой дизайн, потому что, откровенно говоря, если вы используете C++, вы можете воспользоваться тем, что предлагает «плюс плюс», и использовать классы строк и STL (aka станд :: basic_string может работать лучше для вас)
неподписанные символ был, как правило, используется для хранения строк юникода в стиле, вы уверены, что вы хотите, чтобы непосредственно бросить его, а преобразование содержимого? –