tochararray array c++ bytearray byte

array - Cómo convertir unsigned char*a std:: string en C++?



string to char c++> (5)

BYTE no es más que typedef unsigned char BYTE;

Puede usar fácilmente cualquiera de los siguientes constructores

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

Tengo unsigned char* , quiero convertirlo a std::string . ¿Puedes decirme la forma más segura de hacer esto?


Si tiene acceso a CryptoPP

Cadena hexagonal legible para char sin signo

std::string& hexed = "C23412341324AB"; uint8_t buffer[64] = {0}; StringSource ssk(hexed, true, new HexDecoder(new ArraySink(buffer,sizeof(buffer))));

Y vuelta

std::string hexed; uint8_t val[32] = {0}; StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed)); // val == buffer


Solo necesita convertir el carácter sin signo en un carácter ya que la clase de texto no tiene un constructor que acepte caracteres sin signo:

unsigned char* uc; std::string s( reinterpret_cast< char const* >(uc) ) ;

Sin embargo, necesitará usar el argumento de longitud en el constructor si su matriz de bytes contiene valores nulos, como si no solo parte de la matriz terminará en la cadena (la matriz hasta el primer nulo)

size_t len; unsigned char* uc; std::string s( reinterpret_cast<char const*>(uc), len ) ;


BYTE* es probablemente un typedef para unsigned char* , pero no puedo decirlo con certeza. Sería útil si nos diga qué es BYTE .

Si BYTE * no tiene firma char *, puede convertirlo a std :: cadena usando std :: string range constructor, que tomará dos iteradores genéricos.

const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World"); int len = strlen(reinterpret_cast<const char*>(str1)); std::string str2(str1, str1 + len);

Dicho eso, ¿estás seguro de que esta es una buena idea? Si BYTE unsigned char tiene unsigned char , puede contener caracteres que no sean ASCII, que pueden incluir valores NULL. Esto hará que strlen den una longitud incorrecta.


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

Alternativamente:

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