Utwórz wiersz std::z litego int8_t

0

Pytanie

W pewnym kodzie int8_t[] typ jest używany zamiast char[].

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

Jak prawidłowo i bezpiecznie stworzyć std::string od tego?

Kiedy ja to zrobię cout << s; Chcę, aby to napisali aewsjakby char[] typ został przekazany do konstruktora.

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

Najlepsza odpowiedź

2

Tu jesteś

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

Lub można użyć również

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

Brzmi jak kiepski pomysł bez wyraźnej zerowego terminatora w tablicy.
dave

@dave I dlaczego zdecydował, że nie ma zera kończącego znaku?
Vlad from Moscow

W tej tablicy musi być 252 zerowych terminatora. :-)
Ted Lyngmo

@dave pomyślałem to samo, a potem przypomniał sobie, że wszystkie brakujące inicjatorów nie jest ustawiony na 0tak , że w nim 252 zerowych terminatora.
NathanOliver

Ach tak, nie widziałem 256-go wymiaru. Więc w tym przypadku wszystko jest w porządku
dave
1

std::string jak i inne pojemniki, mogą być zbudowane z wykorzystaniem parę iteratorów. Ten konstruktor będzie korzystać z niejawne konwersje, jeśli są dostępne, takie jak konwersja int8_t Dla char.

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

Należy zwrócić uwagę, że rozwiązanie to skopiuje cały masyw, w tym niewykorzystane bajty. Jeśli tablica jest często o wiele więcej, niż to konieczne, można zamiast tego szukać zero terminator

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

W innych językach

Ta strona jest w innych językach

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