Creare std::string da int8_t array

0

Domanda

In un po ' di codice int8_t[] il tipo è utilizzato invece di char[].

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(title); // compile error: no corresponding constructor

Come correttamente e in modo sicuro creare un std::string da esso?

Quando farò cout << s; Voglio che si stampa aewscome se char[] il tipo è stato passato al costruttore.

c++ casting char integer
2021-11-23 15:34:12
2

Migliore risposta

2

Qui si sono

int8_t title[256] = { 'a', 'e', 'w', 's' };
std::string s( reinterpret_cast<char *>( title ) );
std::cout << s << '\n';

O si può usare anche

std::string s( reinterpret_cast<char *>( title ), 4 );
2021-11-23 15:45:55

Suona come una cattiva idea, senza un esplicito carattere di terminazione null nella matrice.
dave

@dave E perché hai deciso che non vi è alcun carattere di terminazione null?
Vlad from Moscow

Ci dovrebbe essere 252 nullo di terminazione dell'array. :-)
Ted Lyngmo

@dave ho pensato la stessa cosa e poi, ricordato che tutti mancanti di inizializzatori sono impostati per 0, in modo che si dispone di 252 nullo di terminazione in esso.
NathanOliver

Ah giusto, non avevo visto i 256 dimensioni. Ok allora in questo caso
dave
1

std::string come altri contenitori possono essere costruiti utilizzando una coppia di iteratori. Questo costruttore di usare le conversioni implicite, se disponibile, come la conversione di int8_t per char.

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(std::begin(title), std::end(title));

Si noti che questa soluzione consente di copiare l'intero array, tra cui il byte inutilizzati. Se la matrice è spesso molto più grande di quanto dovrebbe essere, si può guardare per il terminatore null invece

int8_t title[256] = {'a', 'e', 'w', 's'};
auto end = std::find(std::begin(title), std::end(title), '\0');
std::string s(std::begin(title), end);
2021-11-23 15:38:17

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................