9
votes

Convertir uint8_t * en STD :: String en C ++?


2 commentaires

On dirait un duplicata de: Stackoverflow.com/q/1673445/50079


Vote à la réouverture, car cela vient de uint8_t et l'autre est char qui pourrait être différent sur des périphériques insensés.


3 Réponses :


1
votes

est votre uint8 * code> chaîne null-terminé? Si oui, vous pouvez simplement faire:

std::string mystring(data);


3 commentaires

Quand il y a une longueur, les données ne sont probablement pas résolues null


Et il est probablement préférable de le préciser explicitement de toute façon; Tout ce qui va faire est de rechercher la longueur de toute façon.


De plus, vous supposez qu'il n'y a pas de caractère «\ 0» intégré dans la chaîne. La STD :: String ne met aucun accent particulier sur le caractère "\ 0".



0
votes

Pour une size de cas de (UINT8)! = Tailleof (Char), vous pouvez faire:

std::string output( len, 0 );
for ( size_t i = 0; i < len; ++i )
  output[ i ] = static_cast<char>( data[ i ] );


1 commentaires

Tailleof (UINT8)! = Tailleof (Char) est impossible. Tailleof est en unités de char , donc si Char est supérieur à 8 bits, il n'y a aucun moyen d'avoir un type 8 bits, c'est-à-dire uint8 ne peut exister.



14
votes

Si vous ne voulez pas convertir le codage, cela fonctionnera:

std::string s( data, data+len );


0 commentaires