Domanda

Ho un array di unsigned char che ho bisogno in uno std :: string, ma i miei usi attuale modo reinterpret_cast che vorrei evitare. C'è un modo più pulito per fare questo?

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);
È stato utile?

Soluzione

Usa il costruttore iteratore:

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

Ciò presuppone che si desidera che i caratteri non firmati da convertire in char. Se voler loro di essere reinterpretato, allora dovreste usare reinterpret_cast. Sarebbe perfettamente puliti, dal momento che quello che dici è esattamente ciò che viene fatto.

Nel tuo esempio, però, non fa alcuna differenza, perché tutti i valori nella propria matrice sono all'interno della gamma 0 a CHAR_MAX. Così è garantito che tali valori sono rappresentati nello stesso modo in char come sono in unsigned char, e quindi che interpretandola è lo stesso di convertirli. Se tu avessi valori superiori quindi CHAR_MAX poi implementazioni sono autorizzati a trattarli in modo diverso.

Altri suggerimenti

Hai provato 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;
   }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top