c++ - ¿Cómo obtener charlas sin firmar en una cadena std:: sin reinterpret_cast?
stdstring reinterpret-cast (3)
Tengo una matriz de caracteres sin firmar que necesito en una cadena std ::, pero mi forma actual utiliza reinterpret_cast, lo 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);
¿Has probado Sstream?
stringstream s;
s << my_txt;
string str_my_txt = s.str();
Utilice el constructor iterador:
std::string my_std_string(my_txt, my_txt + my_txt_len);
Esto es asumiendo que usted quiere que los caracteres sin firmar se conviertan a char. Si desea que se reinterpreten, debe usar reinterpret_cast
. Eso sería perfectamente limpio, ya que lo que dices es exactamente lo que se hace.
Sin embargo, en su ejemplo, no hay ninguna diferencia, porque todos los valores de su matriz están dentro del rango de 0
a CHAR_MAX
. Por lo tanto, se garantiza que esos valores se representen de la misma manera en char
como en caracteres unsigned char
, y por lo tanto, reinterpretarlos es lo mismo que convertirlos. Si tenía valores mayores que CHAR_MAX
entonces las implementaciones pueden tratarlos de manera diferente.
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;
}