Ich habe unsigned char*
, wollen es umwandeln in std::string
. Können Sie mir bitte sagen, wie ich das am sichersten machen kann?
Antworten
Zu viele Anzeigen?Sie mussten nur die Funktion unsigned char
in eine char
als die string
Klasse hat keinen Konstruktor, der die unsigned char
:
unsigned char* uc;
std::string s( reinterpret_cast< char const* >(uc) ) ;
Sie müssen jedoch das Längenargument im Konstruktor verwenden, wenn Ihr Byte-Array Nullen enthält, da andernfalls nur ein Teil des Arrays in der Zeichenkette landet (das Array bis zur ersten Null)
size_t len;
unsigned char* uc;
std::string s( reinterpret_cast<char const*>(uc), len ) ;
BYTE*
ist wahrscheinlich ein Typendefinition für unsigned char*
aber ich kann es nicht mit Sicherheit sagen. Es wäre hilfreich, wenn Sie uns sagen, was BYTE
ist.
Wenn BYTE* ein unsigned char* ist, können Sie es in einen std::string umwandeln, indem Sie den std::string range Konstruktor verwenden, der zwei generische Iteratoren benötigt.
const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);
Sind Sie dennoch sicher, dass dies eine gute Idee ist? Wenn BYTE
es unsigned char
kann er Nicht-ASCII-Zeichen enthalten, zu denen auch NULL gehören kann. Dadurch wird strlen
eine falsche Länge ergeben.
Hier ist der vollständige Code
#include <bits/stdc++.h>
using namespace std;
typedef unsigned char BYTE;
int main() {
//method 1;
std::vector<BYTE> data = {'H','E','L','L','O','1','2','3'};
//string constructor accepts only const char
std::string s((const char*)&(data[0]), data.size());
std::cout << s << std::endl;
//method 2
std::string s2(data.begin(),data.end());
std::cout << s2 << std::endl;
//method 3
std::string s3(reinterpret_cast<char const*>(&data[0]), data.size()) ;
std::cout << s3 << std::endl;
return 0;
}
- See previous answers
- Weitere Antworten anzeigen