Comment faire pour convertir de const char* unsigned int c++
Je suis nouveau dans la programmation en c++ et j'ai essayé de convertir const char* unsigned int avec pas de chance.
J'ai un:
const char* charVar;
et j'ai besoin de le convertir:
unsigned int uintVar;
Comment peut-il être fait en C++?
Grâce
-1 il n'est pas clair ce que tu veux dire conversion ici. Qu'avez-vous essayer?
OriginalL'auteur Bizwoo | 2010-10-26
Vous devez vous connecter pour publier un commentaire.
De sortie:
OriginalL'auteur Steve Townsend
Qu'entendez-vous par convertir?
Si vous parlez de la lecture d'un nombre entier à partir du texte, vous disposez de plusieurs options.
Boost lexicale cast: http://www.boost.org/doc/libs/1_44_0/libs/conversion/lexical_cast.htm
Chaîne de stream:
Ou le bon vieux C fonctions
atoi()
etstrtol()
lexical_cast
comme un choix... bien que j'aie tenté de l'enlever pour les CRT proxénétisme 🙂
OriginalL'auteur Let_Me_Be
Si vraiment vous voulez convertir un pointeur vers une constante caractère dans un unsigned int, alors vous devriez utiliser en c++:
Cette fonction convertit l'adresse à laquelle le pointeur sur un entier non signé.
Si vous voulez convertir le contenu vers lequel le pointeur sur un unsigned int, vous devez utiliser:
Si vous voulez obtenir un nombre entier à partir d'une chaîne, et donc d'interpréter la const char* comme un pointeur vers un const char tableau, vous pouvez utiliser l'une des solutions mentionnées ci-dessus.
OriginalL'auteur ogni42
Comme en C:
Le C++ façon:
Avis que, dans les deux cas, je n'ai vérifier le code de retour de la conversion pour vous assurer qu'il a effectivement travaillé.
OriginalL'auteur Eric Towers
En C ce qui peut être fait à l'aide de
atoi
qui est également disponible pour C++ viacstdlib
.atoi("blah")
retour? Et comment est-ce différent deatoi(0)
?Il suffit de noter que
atoi()
est probablement le pire des choix parmi toutes les options disponibles.Il y a une raison, elle est appelée la C de la Bibliothèque d'Exécution.
Cela dépend de votre utilisation, si
atoi
est mauvais. Tout d'abord, il est de loin la plus courte de toutes les solutions. D'autre part, il n'a pas de contrôle d'erreur. Donc, il est vraiment seulement une façon rapide et sale, j'ai souvent trouvé pour être utile.Je n'ai pas encore trouver un cas d'utilisation où je n'aurais pas l'esprit si j'ai eu tort de données sans aucune indication réelle.
OriginalL'auteur Helmut Grohne
J'ai l'habitude d'utiliser cette fonction générique pour convertir une chaîne en "rien du tout":
juste l'utiliser comme dans:
success
sera égal à 0, même si vous appelezgetValueFromString("-123", an_int)
et vous obtiendrez la valeur d'ordures dansan_int
.il avait été déclaré que
unsigned int
et, par conséquent, vous ne pouvez pas affecter un nombre négatif. et ce qui était stocké dansan_int
n'était pas de "déchets", mais les 2 en complément à la représentation de-123
.Oh, génial @Sdra, merci de le préciser! J'avais essayé, et bien que les valeurs ont été ordures. 🙂
OriginalL'auteur Sdra
atoi
fonction de convertir const char* int, qui peut être implicitement converti en unsigned. Cela ne fonctionne pas pour les grands entiers qui ne rentrent pas dans int.Plus C++-ish façon est d'utiliser des chaînes et des ruisseaux
Plus facile, mais non standard façon serait d'utiliser le boost de lexicale cast.
HTH
OriginalL'auteur Armen Tsirunyan
Sans plus d'information il n'existe aucun moyen pour bien répondre à cette question. Ce que vous essayez de convertir exactement? Si charVar est une représentation ascii de la chaîne, puis vous pouvez faire comme d'autres l'ont suggéré et l'utilisation stringstreams, atoi, sscanf, etc.
Si vous voulez de la vraie valeur pointée par charVar, puis au lieu de cela, vous voulez quelque chose comme:
Ou si charVal est le pointeur vers le premier octet d'un entier non signé alors:
Let_Me_Be: j'avais eu l'impression qu'elle était valide jusqu'au fonte ou de char*. J'ai regardé dedans et en fait, il semble qu'il ne peut être valide à la fonte de char*, mais pas de char*. Je vois que l'idiome assez souvent, donc j'ai besoin de faire quelques recherches supplémentaires.
OriginalL'auteur Cercerilla
OriginalL'auteur mcvz
Vous pouvez également utiliser
strtoul
ou_tcstoul
pour obtenir unsigned long de la valeur deconst char*
puis convertir la valeur unsigned int.http://msdn.microsoft.com/en-us/library/5k9xb7x1(v=vs. 71).aspx
OriginalL'auteur Vishwanath Kamath
'0'
au lieu de48
et'9'
au lieu de57
vous ne dépendra pas de l'ASCII.Aussi, dans
*it++
la*
n'a aucun effet.it++
est suffisante (en fait, je peux utiliser++it
). Enfin, lauintVar < 0
comparaison n'a aucun sens, car le type de données estunsigned
.Ma réponse est d'essayer de montrer quelques conceptuelle. Sinon, 2 lignes de solutions serait la meilleure option ici.
c'++ n'est pas suffisant. (Merci pour unsigned int)
*it++
n'a pas de sens. Vous incrémenter le pointeur et vous déréférencement d'elle, mais vous ne faites pas n'importe quoi avec la valeur que vous obtenez.OriginalL'auteur dmi
Donc je sais que c'est vieux, mais pensé que je pourrais fournir un moyen plus efficace de faire qui va vous donner un peu de souplesse sur ce que vous voulez comme une base.
Ce que cela va faire est de créer un wrapper autour de la méthode strtoul(const char* nptr n', char** endptr, int base) méthode de C. Pour plus d'informations sur cette fonction, vous pouvez lire la description de la page de man ici https://linux.die.net/man/3/strtoul
En cas d'échec, vous aurez errno = ERANGE, ce qui vous permettra de faire une vérification après l'appel de cette fonction avec la valeur ULONG_MAX.
Un exemple de l'utilisation de ce peut être comme suit:
Cela donnera à la sortie
OriginalL'auteur Brandon Manning