Question

J'ai un tableau unsigned char que j'ai besoin dans un std :: string, mais mes utilisations actuelles de façon reinterpret_cast que je voudrais éviter. Est-il un moyen de plus propre à le faire?

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);
Était-ce utile?

La solution

Utilisez le constructeur iterator:

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

Cela suppose que vous voulez que les caractères non signés à convertir en CHAR. Si vous voulez les à être réinterprété, alors vous devriez utiliser reinterpret_cast. Ce serait parfaitement propre, puisque ce que vous dites est exactement ce qui est fait.

Dans votre exemple, cependant, il ne fait aucune différence, parce que toutes les valeurs dans votre tableau sont dans la plage 0 à CHAR_MAX. Donc, il est garanti que ces valeurs sont représentées de la même façon à char comme dans unsigned char, et par conséquent que les réinterprétant est le même que les convertir. Si vous aviez des valeurs supérieures alors CHAR_MAX alors mises en œuvre sont autorisés à les traiter différemment.

Autres conseils

Avez-vous essayé 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;
   }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top