Vytvoriť std::string z int8_t pole

0

Otázka

V niektorých kód int8_t[] typ sa používa namiesto char[].

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

Ako správne a bezpečne vytvoriť std::string z nej?

Keď budem robiť cout << s; Chcem, aby to tlačiť aewsako ak char[] typ prešla na konštruktér.

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

Najlepšiu odpoveď

2

Tu sú

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

Alebo môžete použiť aj

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

Znie to ako zlý nápad, bez výraznej null terminator v poli.
dave

@dave A prečo si sa rozhodol, že nie je null zakončovací znak?
Vlad from Moscow

Tam by mali byť 252 null terminators v tomto poli. :-)
Ted Lyngmo

@dave I keď isté a potom si spomenul, že všetky chýbajúce initializers sú nastavené na 0, tak to má 252 null terminators v ňom.
NathanOliver

Ah právo, nemal vidieť 256 veľkosť. To je ok, potom v tomto prípade
dave
1

std::string podobne ako iné kontajnery môžu byť konštruované pomocou páru iterátorov. Tento konštruktor bude používať implicitnej konverzie, ak sú k dispozícii, napríklad prevod int8_t na char.

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

Upozorňujeme, že toto riešenie bude kopírovať celé pole, vrátane nevyužité bajtov. Ak pole je často oveľa väčšie, než je to potrebné, môžete sa pozrieť na null terminator namiesto

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

V iných jazykoch

Táto stránka je v iných jazykoch

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