go - tutorial - Convertir runa a int?
web scraping python (2)
En el siguiente código, recorro una runa por runa, pero en realidad necesito un int
para realizar un cálculo de suma de comprobación. ¿Realmente necesito codificar la rune
en un []byte
, luego convertirla en una string
y luego usar Atoi
para obtener un int
de la rune
? ¿Es esta la forma idiomática de hacerlo?
// 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
}
En el patio de recreo: http://play.golang.org/p/noWDYjn5rJ
El problema es más simple de lo que parece. Convierte un valor de rune
en un valor int(r)
con int(r)
. Pero su código implica que desea que el valor entero salga de la representación ASCII (o UTF-8) del dígito, que puede obtener de forma trivial con r - ''0''
como rune
, o int(r - ''0'')
como int
. Tenga en cuenta que las runas fuera de rango dañarán esa lógica.
Por ejemplo, sum += (int(c) - ''0'') * factor
,
package main
import (
"fmt"
"strconv"
"unicode/utf8"
)
func main() {
s := "9780486653556"
var factor, sum1, sum2 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))
sum1 += value * factor
sum2 += (int(c) - ''0'') * factor
}
fmt.Println(sum1, sum2)
}
Salida:
124 124