Criar std::string a partir de int8_t matriz

0

Pergunta

Em algumas código int8_t[] tipo é usado em vez de char[].

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

Como corretamente e com segurança crie uma std::string a partir dele?

Quando eu vou fazer cout << s; Eu quero que ele de impressão aews, como se char[] digite foi passado para o construtor.

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

Melhor resposta

2

Você está aqui

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

Ou você pode usar também o

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

Soa como uma má idéia sem uma explícita terminador nulo na matriz.
dave

@dave E por que você decidiu que não há nenhum caractere de terminação nula?
Vlad from Moscow

Deve haver 252 terminadores nulo na matriz. :-)
Ted Lyngmo

@dave pensei a mesma coisa, e então se lembrou de que todos os desaparecidos os inicializadores de são definidas para 0, então ele tem 252 nulo terminadores na mesma.
NathanOliver

Ah direito, não vejo a 256 tamanho. Isso é ok, então, neste caso
dave
1

std::string como outros recipientes podem ser construídos usando um par de iteradores. Este construtor usará conversões implícitas se disponíveis, tais como a conversão de int8_t para char.

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

Note que esta solução irá copiar a matriz inteira, incluindo os bytes não utilizados. Se a matriz é geralmente muito maior do que ele precisa para ser, você pode olhar para o terminador nulo em vez

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

Em outros idiomas

Esta página está em outros idiomas

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