Way unsigned char in ein std :: string ohne reinterpret_cast zu bekommen?
-
27-09-2019 - |
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 tununsigned 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);
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;
}