将符文转换为整数?

新手上路,请多包涵

在下面的代码中,我逐个迭代 string 符文,但实际上我需要一个 int 来执行一些校验和计算。 Do I really need to encode the rune into a []byte , then convert it to a string and then use Atoi to get an 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
}

在操场上: http ://play.golang.org/p/noWDYjn5rJ

原文由 miku 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 708
2 个回答

问题比看起来简单。您将 rune 值转换为 intint(r) 。但是您的代码暗示您想要数字的 ASCII(或 UTF-8)表示形式中的整数值,您可以使用 r - '0' 作为 runeint(r - '0') 作为 int 。请注意,超出范围的符文会破坏该逻辑。

原文由 Gustavo Niemeyer 发布,翻译遵循 CC BY-SA 3.0 许可协议

例如, 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)
}

输出:

 124 124

原文由 peterSO 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题