Convertir rune d'int?
Dans le code suivant, j'ai effectuer une itération sur un string
rune par rune, mais je vais effectivement besoin d'un int
pour effectuer certaines calcul de checksum. Ai-je vraiment besoin d'encoder les rune
dans un []byte
, puis de le convertir en un string
et ensuite utiliser Atoi
pour obtenir un int
de la rune
? Est-ce la idiomatiques façon de le faire?
//The string `s` only contains digits.
var factor int
for i, c := range s[:12] {
if i % 2 == 0 {
factor = 1
} else {
factor = 3
}
buf := make([]byte, 1)
_ = utf8.EncodeRune(buf, c)
value, _ := strconv.Atoi(string(buf))
sum += value * factor
}
Sur l'aire de jeux: http://play.golang.org/p/noWDYjn5rJ
OriginalL'auteur miku | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Le problème est plus simple qu'il n'y paraît. Vous convertir un
rune
de la valeur à unint
valeur avecint(r)
. Mais votre code implique que vous voulez que la valeur de l'entier de l'ASCII (ou UTF-8) la représentation des chiffres, que vous pouvez trivialement obtenir avecr - '0'
comme unrune
, ouint(r - '0')
comme unint
. Sachez qu'en dehors de la plage runes corrompue, que de la logique.OriginalL'auteur Gustavo Niemeyer
Par exemple,
sum += (int(c) - '0') * factor
,De sortie:
*
personnage en fonction de ma table ASCII. Ce que je reçois est une chaîne de caractères etrange
les rendements des runes, qui représentent les personnages. L'aide d'int sur la rune serait me donner la valeur de la représentation, et non de la affichage de valeur, dont j'ai besoin. J'ai fait un court extrait, qui fait allusion à la différence: play.golang.org/p/JLlmKnddGvvoir ma réponse révisée.
Ah, la belle affaire. Je ne sais pas pourquoi votre réponse a été downvoted.
OriginalL'auteur peterSO