Convertir vecteur de uint8 à chaîne
J'ai un pointeur sur un vecteur de type uint8.
Comment devrais-je prendre ce pointeur et de convertir les données dans le vecteur en une chaîne de caractères représentant de son contenu?
Vous devez déjà connaître la longueur du vecteur->size(). A-t-elle de données non-ascii dans les il ou pas?
Il est de toutes les données ascii.
Il est de toutes les données ascii.
OriginalL'auteur Mr S | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
Vous pourriez initialiser le
std::string
avec la séquence obtenue à partir de lastd::vector<uint8_t>
:Il n'est pas nécessaire de jouer à des trucs de vérifier si le
std::vector<uint8_t>
est vide: si elle l'est, la plage est vide. Cependant, vous pourriez vouloir vérifier si le pointeur estv
est null. Le ci-dessus exige qu'il pointe vers un objet valide.Tu veux dire, pourquoi je n'ai pas de réponse à des questions pendant un certain temps? C'est simple: j'ai été occupé à essayer de faire un travail en dehors du travail. Droit maintenant, je suis occupé à travailler pour travailler en dehors du travail.
Je suis surpris de cette réponse est acceptée parce qu'elle ne permet pas de produire quelque chose de "représentant de son contenu". Si vous vecteur est "{1,2,3,4,5,6,7,8,9}", votre sortie sera une chaîne de non-caractères affichables!
il semble que nous avons interprété la question différemment: j'ai lu que demander de convertir une séquence d'octets dans un
std::vector<uint8_t>
à la même séquence d'octets dans unstd::string
. La réponse correspond à celle de l'interprétation. Vous l'interprétation semble être mise en forme le contenu d'unstd::vector<...>
et stocker le résultat dans unstd::string
. Cette question est souvent posée/répondu bien que probablement en deux parties: Comment formater un vecteur? Comment diriger la sortie d'un flux d'une chaîne de caractères?OriginalL'auteur Dietmar Kühl
Pour ceux qui veulent la conversion de faire après de déclarer une chaîne, vous pouvez utiliser std::string::assign(), par exemple:
OriginalL'auteur deddebme
empty()
vecteurs: ils vont revenir une plage valide etstd::string
a un constructeur prenant une paire de saisie des itérateurs.Oh oui vous avez raison, j'ai l'habitude de faire cela parce que j'ai parfois de la compilation avec un vieux STL mise en œuvre qui n'est pas basé sur un modèle de surcharge, totalement oublié.
oui, le vieux RogueWave mise en livraison par défaut la bibliothèque C++ standard de Sun Studio, je suppose. Si j'avais à l'utilisation que je voudrais en fait utiliser
std::copy(v->begin(), v->end(), std::back_inserter(str));
.OriginalL'auteur Mehrdad