Crear std::string de int8_t matriz

0

Pregunta

En algunas código int8_t[] se utiliza el tipo de cambio de char[].

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

Cómo de manera correcta y segura de crear un std::string a partir de ella?

Cuando voy a hacer cout << s; Quiero que se imprima aewscomo si char[] el tipo se pasa al constructor.

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

Mejor respuesta

2

Aquí están

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

O usted puede usar también

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

Suena como una mala idea, sin una explícita terminador nulo de la matriz.
dave

@dave Y ¿por qué han decidido que no hay ningún carácter de terminación null?
Vlad from Moscow

Debe haber 252 terminadores nulos de la matriz. :-)
Ted Lyngmo

@dave yo, sin embargo, la misma cosa, y entonces recordó que todos los que faltan inicializadores se establecen a 0, por lo que tiene 252 null terminadores en ella.
NathanOliver

Ah derecho, no veo el 256 tamaño. Que bien, a continuación, en este caso
dave
1

std::string como otros contenedores puede ser construido con un par de iteradores. Este constructor hará uso de las conversiones implícitas si están disponibles, tales como la conversión de int8_t a char.

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

Tenga en cuenta que esta solución va a copiar toda la matriz, incluyendo la bytes no utilizados. Si la matriz es a menudo mucho más grande de lo que necesita ser, usted puede mirar para el terminador null lugar

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

En otros idiomas

Esta página está en otros idiomas

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