Pregunta

Tengo una matriz sin firmar carbón que necesito en un std :: string, pero mis usos actuales reinterpret_cast manera que me gustaría evitar. ¿Hay una forma más limpia de hacer esto?

unsigned char my_txt[] = {
  0x52, 0x5f, 0x73, 0x68, 0x7e, 0x29, 0x33, 0x74, 0x74, 0x73, 0x72, 0x55
}
unsigned int my_txt_len = 12;

std::string my_std_string(reinterpret_cast<const char *>(my_txt), my_txt_len);
¿Fue útil?

Solución

Utilice el constructor iterador:

std::string my_std_string(my_txt, my_txt + my_txt_len);

Esto es suponiendo que desea que los caracteres sin signo para ser convertidos en carbón. Si que desee a reinterpretarse, entonces debería usar reinterpret_cast. Eso sería perfectamente limpio, ya que lo que se dice es exactamente lo que se hace.

En su ejemplo, sin embargo, no se hace ninguna diferencia, porque todos los valores en la matriz están dentro del rango 0 a CHAR_MAX. Así está garantizado que esos valores se representan de la misma manera en char como lo son en unsigned char, y por lo tanto que la reinterpretación de ellos es la misma que la conversión de ellos. Si usted tuviera valores mayores a continuación, CHAR_MAX luego se les permite implementaciones tratarlos de forma diferente.

Otros consejos

¿Usted ha intentado sstream?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
  int _tmain(int argc, _TCHAR* argv[])
  {
        unsigned char temp  = 200;
        char temp1[4];

        sprintf(temp1, "%d", temp);

        std::string strtemp(temp1);

        std::cout<<strtemp.c_str()<<std::endl;

        return 0;
   }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top