Vytvoření std::string z int8_t pole

0

Otázka

V některých kód int8_t[] typ je používán místo toho char[].

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

Jak správně a bezpečně vytvořit std::string z?

Když budu dělat cout << s; Chci to vytisknout aews,, jako kdyby char[] typ byl předán do konstruktoru.

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

Nejlepší odpověď

2

Zde jsou

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

Nebo můžete použít také

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

Zní to jako špatný nápad bez výslovného null terminátor v poli.
dave

@dave A proč jste se rozhodli, že neexistuje žádný ukončovací znak null?
Vlad from Moscow

Tam by měla být 252 null zakončení v tomto poli. :-)
Ted Lyngmo

@dave myslel jsem, že to samé a pak si vzpomněl, že všechny chybějící inicializátory jsou nastaveny na 0, tak to má 252 null zakončení.
NathanOliver

Ach jo, neviděl 256 velikost. To je ok, pak v tomto případě
dave
1

std::string stejně jako ostatní kontejnery mohou být konstruovány pomocí dvojice iterátorů. Tento konstruktor bude používat implicitní konverze, pokud je k dispozici, jako je například konverze int8_t k char.

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

Všimněte si, že toto řešení bude kopírovat celé pole, včetně nevyužité bajty. V případě, že pole je často mnohem větší, než je třeba, můžete se podívat na null terminator místo

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 jiných jazycích

Tato stránka je v jiných jazycích

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