如何将uint32转换为字符串?

hey*_*hey 23 go

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

jul*_*enc 45

我会这样做strconv.FormatUint:

import "strconv"

var u uint32 = 17
var s = strconv.FormatUint(uint64(u), 10)
// "17"
Run Code Online (Sandbox Code Playgroud)

请注意,预期的参数是uint64,所以你必须先铸造你的uint32第一个.没有具体的FormatUint32功能.

  • 这个解决方案变得更快.因此我建议使用它.`BenchmarkUintStrconv-8 50000000 36.8 ns/op`与`BenchmarkUintSprint-8 20000000 118 ns/op` (3认同)

cre*_*ack 40

我只想使用Sprintf甚至只是Sprint:

var n uint32 = 42
str := fmt.Sprint(n)
println(str)
Run Code Online (Sandbox Code Playgroud)

Go是强类型的.直接将数字转换为字符串是没有意义的.想想C,其中string是char *指向字符串的第一个字母的指针\0.将数字转换为字符串会导致第一个字母指向数字的地址,这没有意义.这就是你需要"积极"转换的原因.


Nik*_*Nik 5

总结一下:

strconv.Itoa 似乎不起作用

strconv.Itoaaccepts int,它是有符号整数(32 位或 64 位),依赖于体系结构的类型(请参阅数字类型)。

我需要将 uint32 转换为字符串

  1. fmt.Sprint
  2. strconv.FormatUint

更好的选择,strconv.FormatUint因为它更快,具有更少的内存分配(基准的例子在这里点击这里)。

强制转换 string(t) 本来可以简单得多。

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

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

该功能将从 Go2 中移除,参见 Rob Pike 的提议