Créer std::string à partir de int8_t tableau

0

La question

Dans certains code int8_t[] type est utilisé au lieu de char[].

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

Comment correctement et en toute sécurité créer un std::string à partir de cela?

Quand je vais faire cout << s; Je veux qu'il imprimer aewscomme si char[] le type a été transmis au constructeur.

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

La meilleure réponse

2

Ici, vous êtes

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

Ou vous pouvez aussi utiliser le

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

Sonne comme une mauvaise idée, sans obligation terminateur null dans le tableau.
dave

@dave Et pourquoi avez-vous décidé qu'il n'y a pas de caractère null de la fin?
Vlad from Moscow

Il devrait être 252 terminateur null dans ce tableau. :-)
Ted Lyngmo

@dave, j'ai bien la même chose et se souvint alors que toutes les initialiseurs sont mis à 0elle dispose donc d'252 terminateur null en elle.
NathanOliver

Ah droit, n'a pas vu l'256 taille. C'est ok, alors dans ce cas
dave
1

std::string comme d'autres conteneurs peuvent être construits en utilisant une paire d'itérateurs. Ce constructeur utilise des conversions implicites si disponibles, telles que la conversion int8_t pour char.

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

Notez que cette solution permettra de copier l'ensemble du tableau, y compris les octets inutilisés. Si le tableau est souvent beaucoup plus grande que nécessaire, vous pouvez regarder pour le terminateur null à la place

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

Dans d'autres langues

Cette page est dans d'autres langues

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