unsigned char * es básicamente una matriz de bytes y se debe usar para representar datos sin procesar en lugar de una cadena en general. Una cadena Unicode se representaría como wchar_t *
De acuerdo con el estándar de C++, una reinterpretación_cast entre char * sin signo y char * es segura ya que son del mismo tamaño y tienen la misma construcción y restricciones. Intento evitar reintrepret_cast incluso más que const_cast en general.
Si el yeso estático falla con lo que está haciendo, puede reconsiderar su diseño porque, francamente, si está utilizando C++, puede aprovechar lo que ofrece la parte "plus plus" y usar cadenas de caracteres y STL (también conocido como std :: basic_string podría funcionar mejor para usted)
unsigned char se ha utilizado normalmente para la celebración de las cadenas unicode estilo, ¿está seguro de que desea emitir directamente en lugar de convertir los contenidos? –