J'ai unsigned char*
, je veux le convertir en std::string
. Pouvez-vous s'il vous plaît me dire le moyen le plus sûr de le faire?
Vous avez juste besoin de convertir le caractère non signé en caractère car la classe string n'a pas de constructeur acceptant le caractère non signé:
unsigned char* uc;
std::string s( reinterpret_cast< char const* >(uc) ) ;
Cependant, vous devrez utiliser l'argument length dans le constructeur si votre tableau d'octets contient des valeurs NULL, comme si vous ne partiez pas du tableau dans la chaîne (le tableau jusqu'au premier null)
size_t len;
unsigned char* uc;
std::string s( reinterpret_cast<char const*>(uc), len ) ;
BYTE*
est probablement un typedef pour unsigned char*
, mais je ne peux pas le dire avec certitude. Cela aiderait si vous nous disiez ce que BYTE
est.
Si BYTE * est unsigned char *, vous pouvez le convertir en std :: string à l'aide du constructeur de plage std :: string, qui prendra deux itérateurs génériques.
const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);
Cela étant dit, êtes-vous sûr que c'est une bonne idée? Si BYTE
est unsigned char
, il peut contenir des caractères non-ASCII, pouvant inclure des valeurs NULL. Ceci fera que strlen
donnera une longueur incorrecte.
BYTE *str1 = "Hello World";
std::string str2((char *)str1); /* construct on the stack */
Alternativement:
std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
BYTE n'est rien d'autre que typedef unsigned char BYTE;
Vous pouvez facilement utiliser l'un des constructeurs ci-dessous
string ( const char * s, size_t n );
string ( const char * s );
Si a accès à CryptoPP
Chaîne hexadécimale lisible en caractère non signé
std::string& hexed = "C23412341324AB";
uint8_t buffer[64] = {0};
StringSource ssk(hexed, true,
new HexDecoder(new ArraySink(buffer,sizeof(buffer))));
Et retour
std::string hexed;
uint8_t val[32] = {0};
StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed));
// val == buffer