Crea std::string din int8_t matrice

0

Problema

În unele cod int8_t[] tip este folosit în loc de char[].

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

Cum să mod corespunzător și în condiții de siguranță a crea un std::string de la ea?

Când voi face cout << s; Vreau print aews, ca și în cazul char[] tipul a fost trecut la constructor.

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

Cel mai bun răspuns

2

Aici sunt

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

Sau puteți folosi, de asemenea,

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

Sună ca o idee proastă, fără o explicită terminator null în matrice.
dave

@dave Și de ce ai decis că nu există nici nul de încheiere personaj?
Vlad from Moscow

Acolo ar trebui să fie 252 null terminatori în matrice. :-)
Ted Lyngmo

@dave am crezut același lucru și apoi și-a amintit că toate lipsă de initializare sunt setate la 0, deci are 252 null terminatori în ea.
NathanOliver

Ah da, n-am văzut 256 dimensiune. Asta e ok, atunci în acest caz
dave
1

std::string ca și alte recipiente pot fi construite folosind o pereche de iteratori. Acest constructor va folosi implicit conversii, dacă este disponibil, cum ar fi de conversie int8_t pentru a char.

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

Rețineți că această soluție va copia întreaga matrice, inclusiv neutilizate bytes. Dacă o matrice este de multe ori mult mai mare decât aceasta trebuie să fie, poti sa te uiti pentru terminator null în loc

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

În alte limbi

Această pagină este în alte limbi

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