La conversion de int[] String en C++
J'ai une chaîne définie comme std::string header = "00110033";
maintenant j'ai besoin de la chaîne pour contenir les valeurs d'octets de les chiffres, comme si sa construit de la façon
char data_bytes[] = { 0, 0, 1, 1, 0, 0, 3, 3};
std::string header = new std::string(data_bytes, 8).c_str());
J'ai converti la chaîne initiale à int
tableau à l'aide de atoi
. Maintenant, je ne suis pas sûr de savoir comment faire la chaîne. Laissez-moi savoir si il ya une meilleure approche.
Je suis incapable de comprendre votre question.
la syntaxe de la 2ème ligne n'est pas correct. Aussi, quelle est l'intention de l'
Pourquoi avez-vous besoin de faire cela? Qu'allez-vous faire si le tableau contient une valeur qui n'est pas compris entre 0 et 9?
Il est inefficace (en raison de la copie) et une fuite de mémoire (en raison de
la syntaxe de la 2ème ligne n'est pas correct. Aussi, quelle est l'intention de l'
new
ici?Pourquoi avez-vous besoin de faire cela? Qu'allez-vous faire si le tableau contient une valeur qui n'est pas compris entre 0 et 9?
Il est inefficace (en raison de la copie) et une fuite de mémoire (en raison de
new
sans stocker le pointeur correspondant delete
) pour dire std::string header = (new std::string(data_bytes, 8))->c_str();
(ou quel que soit ce que tu voulais dire). Vous pouvez juste dire std::string header(data_bytes, 8);
à la place.OriginalL'auteur Manoj | 2011-03-07
Vous devez vous connecter pour publier un commentaire.
vous pouvez écrire une petite fonction
non testé!
une approche légèrement différente
Pas de problème! Ravi de vous aider.
atoi convertit une chaîne de type int, alors que vous avez besoin de convertir en int en string. Vous devez utiliser de la ltid, qui n'est pas standard de la fonction, et c'est probablement la meilleure solution est de convertir un int en caractère par l'ajout de '0' (voir ma solution). Vous pouvez également utiliser lexicale cast:
boost::lexical_cast<std::string>(int_array[temp]);
Vous avez raison, *facepalm
Utilisation
std::stringstream
au lieu de cela, il est plus sûr.OriginalL'auteur ultifinitus
Ce faire:
Ou peut-être, vous voulez faire cela:
Démo à ideone : http://ideone.com/RzrYY
EDIT:
Dernier
\0
dans data_bytes est nécessaire. Voir aussi cet intéressant de sortie ici: http://ideone.com/aYtlLPS: je ne savais pas ça avant, grâce à Ashot j'ai pris connaissance de cette différence de l'expérimentation de la!
Qui a dit?
data_bytes n'est pas en terminant par '\0' donc vous ne pouvez pas l'imprimer. + Dans les deux cas, votre chaîne ne sera pas égale à la chaîne("00110033");
Vous n'obtiendrez pas les résultats que vous attendez
la droite. +1 🙂
OriginalL'auteur Nawaz
OriginalL'auteur UmmaGumma
En supposant que vous êtes à l'aide d'un "à peu près normal" système où les valeurs numériques de
'0'
à'9'
sont consécutifs, vous pouvez simplement effectuer une itération sur chaque élément et de soustraire'0'
:Constantin Dinca L'OP a une chaîne comme "00111" et veut qu'il soit traduit pour les réelles valeurs d'octets, par exemple "00111" -> "\000\000\001\001\001". Ainsi, vous soustraire.
OriginalL'auteur Mark B
Vous pouvez faire ceci:
OriginalL'auteur Eugen Constantin Dinca