Ho unsigned char*
, voglio convertirlo in std::string
. Puoi dirmi per favore il modo più sicuro per farlo?Come convertire il char unsigned * in std :: string in C++?
risposta
Hai solo bisogno di lanciare l'unsigned char in un char come la classe String non ha un costruttore che accetta unsigned char:
unsigned char* uc;
std::string s(reinterpret_cast< char const* >(uc)) ;
Tuttavia, sarà necessario utilizzare l'argomento di lunghezza nel costruttore se la matrice di byte contiene null, come se yo u non solo una parte della matrice finiranno nella stringa (la matrice fino al primo nullo)
size_t len;
unsigned char* uc;
std::string s(reinterpret_cast<char const*>(uc), len) ;
BYTE * pbData = "SomeString" size_t length = 10 Ho la lunghezza prima della mano, quindi ho usato questo: I usato questo metodo, "std :: string (reinterpret_cast
Come pedante della portabilità, voglio sottolineare che questo funziona solo su sistemi con aritmetica del complemento a 2. Sulle architetture complementari o di magnitudine dei segni di 1, non è sicuro reinterpret_cast tra 'char *' e 'unsigned char *' (beh, è sicuro, ma otterrai risultati sorprendenti se 'char' è firmato e uno qualsiasi dei caratteri avere il bit più alto impostato). In questo caso l'interrogante è ovviamente su Windows, quindi nessun problema. –
BYTE *str1 = "Hello World";
std::string str2((char *)str1); /* construct on the stack */
alternativa:
std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
Non funziona, viene visualizzato un messaggio di errore "'std :: basic_string <_Elem, _Traits, _Ax> :: basic_string (const std :: allocator <_Ty> &)': impossibile convertire il parametro 1 da 'BYTE *' a 'const std :: allocator <_Ty> & '" – Unicorn
Ciò è dovuto al fatto che' std :: string' non ha un costruttore che accetta un 'char senza segno'', e quindi il compilatore ricade sul costruttore temporizzato pensato per gli allocatori. È necessario utilizzare 'std :: string (Iterator begin, Iterator end)', o 'std :: string (const char *, std :: size_t n)' e trasmettere il BYTE * a un char * –
'std: : string & str3 = new ... ', non intendevi' * 'invece di' & '? E btw, la creazione di std :: string sull'heap è in genere una cattiva idea e sconfigge metà dello scopo di avere una classe stringa con semantica del valore. – sbk
BYTE*
è probabilmente un typedef per unsigned char*
, ma non posso dirlo con certezza. Sarebbe utile se tu ci dica cosa è BYTE
.
Se BYTE * è un carattere non firmato *, è possibile convertirlo in una stringa std :: utilizzando il costruttore di intervallo std :: string, che prenderà due Iterator generici.
const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);
Detto questo, sei sicuro che sia una buona idea? Se BYTE
è unsigned char
, può contenere caratteri non ASCII, che possono includere valori NULL. Ciò renderà strlen
una lunghezza errata.
BYTE è altro che typedef unsigned char BYTE;
Si può facilmente utilizzare uno qualsiasi dei costruttori di sotto
string (const char * s, size_t n);
string (const char * s);
Se ha accesso al cryptopp
leggibile Hex String a char unsigned
std::string& hexed = "C23412341324AB";
uint8_t buffer[64] = {0};
StringSource ssk(hexed, true,
new HexDecoder(new ArraySink(buffer,sizeof(buffer))));
E torna
std::string hexed;
uint8_t val[32] = {0};
StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed));
// val == buffer
- 1. Come convertire std :: string in const char *?
- 2. const unsigned char * a std :: string
- 3. convertire il vettore <string> in char ** C++
- 4. converte char unsigned * in stringa
- 5. Conversione (void *) in std :: vector <unsigned char>
- 6. Come convertire std :: string in NSString?
- 7. Come convertire std :: vector <unsigned char> nel vettore <char> senza copiare?
- 8. Come convertire Platform :: String in char *?
- 9. Come convertire char * in std :: vector?
- 10. Come convertire 'unsigned long' in string in java
- 11. convertire std :: string in basic_ostream?
- 12. std :: make_pair: non può convertire (tipo 'char') 'ch' digitare 'char &&'
- 13. Come convertire QString in std :: string?
- 14. Un modo corretto per convertire il byte [] in java in unsigned char * in C++ e viceversa?
- 15. Come convertire v8 :: String a const char *
- 16. Come convertire std :: string in LPCSTR?
- 17. convertire Rcpp :: CharacterVector in std :: string
- 18. Come convertire char * a un sistema :: string^
- 19. Converti float in std :: string in C++
- 20. Come convertire unsigned long in stringa
- 21. Scanf unsigned char in esadecimale
- 22. C++ Come rimuovere \ 0 char da std :: string
- 23. Come stampare char unsigned [] come HEX in C++?
- 24. Mat to unsigned char *
- 25. Come convertire std :: string al V8 locale <string>
- 26. Convertire un 'System :: String ^' in 'const char *' in vC++
- 27. Converti array di caratteri in char unsigned *
- 28. Come convertire da char a Piattaforma :: String^(C++/CLI)
- 29. Inserire un carattere `unsigned` in un` char`
- 30. Come convertire il char in stringa?
C++ non ha un tipo di byte, quindi è necessario dirci che il tipo è in realtà. – Yacoby
BYTE risolve in "char unsigned" – Unicorn
E per quanto riguarda 'Byte'? E, cosa più importante, a cosa punta il puntatore? Un singolo valore 'Byte' o un array di' Byte'? Cosa vuoi nella tua stringa: una rappresentazione testuale del valore del puntatore o della stringa che rappresenta i valori degli oggetti puntati? –