如何将uint32转换为字符串?

时间:2014-07-22 11:21:24

标签: go

我需要将uint32转换为字符串。我怎样才能做到这一点 。 strconv.Itoa似乎不起作用。 长店: 我需要将通过imap包接收的UID转换为字符串,以便稍后可以将其设置为序列。作为旁注,我想知道为什么Go中的这种转换很困难。演员string(t)本来可以这么容易

4 个答案:

答案 0 :(得分:36)

我会使用strconv.FormatUint执行此操作:

import "strconv"

var u uint32 = 17
var s = strconv.FormatUint(uint64(u), 10)
// "17"

请注意,预期参数为uint64,因此您必须首先投射uint32。没有特定的FormatUint32功能。

答案 1 :(得分:33)

我会简单地使用Sprintf,甚至只使用Sprint:

var n uint32 = 42
str := fmt.Sprint(n)
println(str)

Go是强类型的。直接将数字转换为字符串是没有意义的。考虑C,其中string是char *,它是指向由\0终止的字符串的第一个字母的指针。将数字转换为字符串会导致第一个字母指向数字的地址,这没有意义。这就是为什么你需要积极地"转换。

答案 2 :(得分:0)

总结:

  

strconv.Itoa似乎不起作用

strconv.Itoa接受int,它是有符号整数(32位或64位),与体系结构相关的类型(请参见Numeric types)。

  

我需要将uint32转换为字符串

  1. 使用fmt.Sprint
  2. 使用strconv.FormatUint

更好的选项strconv.FormatUint,因为它速度更快,内存分配更少(基准示例herehere)。

  

强制转换字符串(t)可能要容易得多。

使用string不能像某些人期望的那样工作,请参阅spec

  

将有符号或无符号整数值转换为字符串类型会产生一个包含整数的UTF-8表示形式的字符串。有效Unicode代码点范围之外的值将转换为“ \ uFFFD”。

该功能将从Go2中删除,请参见Rob Pike的proposal

答案 3 :(得分:0)

要获得更强大的解决方案,您可以使用 text/template

package main

import (
   "text/template"
   "strings"
)

func format(s string, v interface{}) string {
   t, b := new(template.Template), new(strings.Builder)
   template.Must(t.Parse(s)).Execute(b, v)
   return b.String()
}

func main() {
   imap := struct{UID uint32}{999}
   s := format("{{.UID}}", imap)
   println(s == "999")
}

https://pkg.go.dev/text/template