50 Stimmen

Wie konvertiert man unsigned char* in std::string in C++?

Ich habe unsigned char* , wollen es umwandeln in std::string . Können Sie mir bitte sagen, wie ich das am sichersten machen kann?

77voto

Yacoby Punkte 52756

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 ) ;

10voto

Charles Salvia Punkte 50361

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.

4voto

spoulson Punkte 20898
BYTE *str1 = "Hello World";
std::string str2((char *)str1);  /* construct on the stack */

Alternativ dazu:

std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;

2voto

Satbir Punkte 6112

BYTE ist nichts anderes als typedef unsigned char BYTE;

Sie können einfach einen der folgenden Konstruktoren verwenden

string ( const char * s, size_t n );
string ( const char * s );

2voto

silentrandom Punkte 36

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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X