Frage

Ich habe einen unsigned char-Array, dass ich in einem std :: string brauche, aber meine aktuelle Art und Weise Anwendungen reinterpret_cast die ich vermeiden möchte. Gibt es einen sauberen Weg, um dies?

zu tun
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);
War es hilfreich?

Lösung

Verwenden Sie den Iterator Konstruktor:

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

Dies wird vorausgesetzt, dass Sie die unsigned chars wollen char umgewandelt werden. Wenn Sie wollen sie neu interpretiert werden, dann sollten Sie reinterpret_cast verwenden. Das wäre absolut sauber sein, da das, was Sie sagen, ist genau das, was getan wird.

In Ihrem Beispiel, obwohl, macht es keinen Unterschied machen, weil alle Werte im Array im Bereich 0 zu CHAR_MAX sind. So ist gewährleistet, dass diese Werte auf die gleiche Weise in char dargestellt werden, wie sie in unsigned char sind, und damit, dass sie neu zu interpretieren ist das gleiche wie sie konvertiert. Wenn Sie Werte hatten größer als CHAR_MAX dann Implementierungen erlaubt sie anders zu behandeln.

Andere Tipps

Haben Sie versucht, 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;
   }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top