2010-12-22 19 views
3

Mögliche Duplizieren:
How to Convert Byte* to std::string in C++?Convert uint8 * std :: string

Hey Leute,

ich auf einem Embedded-Gerät bin und versuchen, eine Nachricht zu empfangen. Diese Nachricht wird durch eine const uint8* data und ihre Länge uint8 len

gegeben, jetzt brauche ich eine Std :: string, um meine Daten auszugeben.

+0

Sieht aus wie ein Duplikat davon: http://Stackoverflow.com/q/1673445/50079 – Jon

Antwort

8

Wenn Sie nicht wollen, die Codierung konvertieren dies funktioniert:

std::string s(data, data+len); 

Wenn Sie UTF-8 in das, was System-Codierung verwendet wird, indem Sie Ihre Plattform konvertieren möchten, müssen Sie einige plattformspezifische Mittel verwenden.

1

Ist Ihr uint8* String nullterminiert? Wenn ja, können Sie einfach tun:

std::string mystring(data); 
+0

Wenn es eine Länge gibt, sind die Daten wahrscheinlich nicht Null-terminiert – Milan

+0

Und es ist wahrscheinlich besser, es trotzdem explizit anzugeben; alles, was wir tun werden, ist, die Länge wieder zu suchen. – GManNickG

+0

Sie gehen auch davon aus, dass in der Zeichenfolge kein '\ 0' Zeichen enthalten ist. Die std :: string legt keinen besonderen Wert auf das Zeichen "\ 0". –

0

Aus irgendeinem Fall sizeof (uint8) = sizeof (char), die Sie tun können:

std::string output(len, 0); 
for (size_t i = 0; i < len; ++i) 
    output[ i ] = static_cast<char>(data[ i ]); 
+2

'sizeof (uint8)! = Sizeof (char)' ist unmöglich. "sizeof" ist in Einheiten von "char", wenn also "char" größer als 8 Bits ist, gibt es keine Möglichkeit, einen 8-Bit-Typ zu haben, d. h. "uint8" kann nicht existieren. –