【问题标题】:string to number conversion in golanggolang中的字符串到数字的转换
【发布时间】:2016-01-12 20:57:28
【问题描述】:

Golang 有 strconv 库,可以将字符串转换为 int64 和 uint64。

但是,其他整数数据类型似乎不受支持,因为我找不到字节、int16、uint16、int32、uint32 数据类型的转换函数。

始终可以将字节、16 位和 32 位数据类型转换为 int64 和 uint64,而不会损失精度。这就是语言的本意吗?

【问题讨论】:

标签: go


【解决方案1】:

您可以使用 fmt.Sprintf() 方法将任何 int 类型转换为字符串

var num int64
numstring:=fmt.Sprintf("%d",num)

【讨论】:

【解决方案2】:

例如,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    n := int16(42)
    s := strconv.FormatInt(int64(n), 10)
    fmt.Printf("n %d s %q\n", n, s)
}

输出:

n 42 s "42"

【讨论】:

    【解决方案3】:

    如果您更仔细地查看文档,您可以使用此方法;

    func ParseInt(s string, base int, bitSize int)
    

    https://golang.org/pkg/strconv/#ParseInt

    bitSize 参数表示 int 有多大,因此您可以为那些较小的整数类型执行 81632Atoi 在内部调用它。我相信您希望 10 用于 base 参数。所以就像b, err := strconv.ParseInt("5", 10, 8) 一个字节。

    编辑:如果 OP 实际上混淆了如何将 16 位 int 转换为字符串...如果这是您的预期目标,只需使用 fmt.Sprintf 或您可以进行从较小的 int 到较大的 int 的转换,因为它总是会成功。两者的例子在这里; https://play.golang.org/p/UWSVxEmQ1N

    package main
    
    import "fmt"
    import "strconv"
    
    func main() {
        var a int16
        a = 5
        s := fmt.Sprintf("%d", a)
        s2 := strconv.Itoa(int(a))
        fmt.Println(s)
        fmt.Println(s2)
    }
    

    【讨论】:

    • ParseIntfrom 字符串转换为整数。问题是询问另一个方向 - 将 转换为 字符串。
    • @zmb 我非常怀疑这一点。大小问题仅在从字符串到数字类型时才相关。字符串的大小是无限的(除了你的 cpu 的内存),所以我显然可以将语言中的任何类型的数字转换为字符串,而无需考虑任何这些。我也不需要使用像strconv 这样的特殊库,fmt 中的方法就足够了。最后,如果我有一个 32 位 int 和一个仅适用于 64 位的 'itoa' 方法,正如 OP 指出的那样,很明显需要做的事情是转换为 (int64),它总是会成功.. .
    • 不是吗?该问题的标题是“数字到字符串的转换”,然后说“strconv 将 int64 和 uint64 转换为字符串”。
    • @zmb 我认为 OP 由于这个问题没有任何意义而感到困惑。数字占用的字节数显然与转换为字符串无关......无论如何,为了回应您的评论,我更新以解释任一方向的转换然后被否决¯_(ツ)_/¯
    • 我认为 OP 也很困惑,只是出于不同的原因。也许他不知道 fmt 包。无论哪种情况,你都得到了我的支持 :)
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2014-02-27
    相关资源
    最近更新 更多