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

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

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

  • 是的,转换为uint64或int64,然后编码为字符串。
  • 使用fmt.Sprintf()将任何整数类型转换为字符串

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

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

例如,

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
   "fmt"
   "strconv"
)

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

输出:

1
n 42 s"42"

如果您仔细看一下文档,可以使用此方法。

1
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或您可以 从小整数到大整数的转换,因为它将始终成功。 两者的例子; https://play.golang.org/p/UWSVxEmQ1N

1
2
3
4
5
6
7
8
9
10
11
12
13
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)
}
  • ParseInt从字符串转换为整数。问题是询问另一个方向-转换为字符串。
  • @zmb我对此表示高度怀疑。大小问题仅在从字符串变为数字类型时才有意义。字符串的大小是不受限制的(CPU内存除外),因此我显然可以将语言中任何类型的数字转换为字符串,而不必考虑任何此类问题。我也不需要使用像strconv这样的特殊库,fmt中的方法就足够了。最后,如果我有一个32位int和一个itoa方法仅适用于64位,因为OP指出其非常明显的是需要做的事情,这是强制转换为(int64)的方法,它将永远成功...
  • @zmb不,它没有。
  • 怎么会该问题的标题为"数字转换为字符串",然后说" strconv将int64和uint64转换为字符串"。
  • @zmb我认为由于这个问题没有任何意义,OP感到困惑。一个数字占用的字节数显然与转换为字符串无关...无论如何,为了回应您的评论,我更新了解释任一方向的转换,然后降低了_(ツ)_ /
  • 我认为OP也很困惑,只是出于不同的原因。也许他不知道fmt软件包。无论哪种情况,您都可以得到我的支持:)