mik*_*iku 22 idioms type-conversion go rune
在下面的代码中,我string
用符文迭代一个符文,但实际上我需要int
执行一些校验和计算.我真的需要来编码rune
成一个[]byte
,然后将其转换为一个string
,然后用Atoi
获得的int
出来的rune
?这是惯用的方式吗?
// 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
}
Run Code Online (Sandbox Code Playgroud)
Gus*_*yer 53
问题比它看起来更简单.你一个转换rune
值的int
与值int(r)
.但是你的代码暗示你想要数字的ASCII(或UTF-8)表示中的整数值,你可以简单地将其r - '0'
作为a rune
或int(r - '0')
a int
.请注意,超出范围的符文会破坏这种逻辑.
pet*_*rSO 11
例如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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
124 124
Run Code Online (Sandbox Code Playgroud)