Pergunta

Eu tenho uma matriz de char não assinada que eu preciso em uma string std ::, mas minha maneira atual usa reinterpret_cast que eu gostaria de evitar. Existe uma maneira mais limpa de fazer isso?

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);
Foi útil?

Solução

Use o construtor de iterador:

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

Isso assume que você deseja que os chars não assinados sejam convertidos em char. Se você querer eles para serem reinterpretados, então você deve usar reinterpret_cast. Isso seria perfeitamente limpo, pois o que você diz é exatamente o que é feito.

No seu exemplo, porém, não faz diferença, porque todos os valores em sua matriz estão dentro do intervalo 0 para CHAR_MAX. Portanto, é garantido que esses valores sejam representados da mesma maneira em char Como eles estão em unsigned char, e, portanto, que reinterpretá -los é o mesmo que convertê -los. Se você tivesse valores maiores então CHAR_MAX Em seguida, as implementações podem tratá -las de maneira diferente.

Outras dicas

Você já experimentou 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top