在Golang中将int32转换为字符串
发布时间:2020-12-16 19:26:05 所属栏目:大数据 来源:网络整理
导读:我需要在Golang中将int32转换为字符串.是否可以在Golang中将int32转换为字符串而不先转换为int或int64? Itoa需要一个int. FormatInt需要一个int64. 一行答案是fmt.Sprint(i). 无论如何,有许多转换,甚至在标准库函数内部,如fmt.Sprint(i),所以你有一些选项(
|
我需要在Golang中将int32转换为字符串.是否可以在Golang中将int32转换为字符串而不先转换为int或int64?
Itoa需要一个int. FormatInt需要一个int64.
一行答案是fmt.Sprint(i).
无论如何,有许多转换,甚至在标准库函数内部,如fmt.Sprint(i),所以你有一些选项(尝试The Go Playground): 1-您可以编写转换函数(最快): func String(n int32) string {
buf := [11]byte{}
pos := len(buf)
i := int64(n)
signed := i < 0
if signed {
i = -i
}
for {
pos--
buf[pos],i = '0'+byte(i%10),i/10
if i == 0 {
if signed {
pos--
buf[pos] = '-'
}
return string(buf[pos:])
}
}
}
2-你可以使用fmt.Sprint(i)(慢) // Sprint formats using the default formats for its operands and returns the resulting string.
// Spaces are added between operands when neither is a string.
func Sprint(a ...interface{}) string {
p := newPrinter()
p.doPrint(a)
s := string(p.buf)
p.free()
return s
}
3-您可以使用strconv.Itoa(int(i))(快速) // Itoa is shorthand for FormatInt(int64(i),10).
func Itoa(i int) string {
return FormatInt(int64(i),10)
}
4-你可以使用strconv.FormatInt(int64(i),10)(更快) // FormatInt returns the string representation of i in the given base,// for 2 <= base <= 36. The result uses the lower-case letters 'a' to 'z'
// for digit values >= 10.
func FormatInt(i int64,base int) string {
_,s := formatBits(nil,uint64(i),base,i < 0,false)
return s
}
比较&基准测试(具有50000000次迭代): s = String(i) takes: 5.5923198s s = String2(i) takes: 5.5923199s s = strconv.FormatInt(int64(i),10) takes: 5.9133382s s = strconv.Itoa(int(i)) takes: 5.9763418s s = fmt.Sprint(i) takes: 13.5697761s 码: package main
import (
"fmt"
//"strconv"
"time"
)
func main() {
var s string
i := int32(-2147483648)
t := time.Now()
for j := 0; j < 50000000; j++ {
s = String(i) //5.5923198s
//s = String2(i) //5.5923199s
//s = strconv.FormatInt(int64(i),10) // 5.9133382s
//s = strconv.Itoa(int(i)) //5.9763418s
//s = fmt.Sprint(i) // 13.5697761s
}
fmt.Println(time.Since(t))
fmt.Println(s)
}
func String(n int32) string {
buf := [11]byte{}
pos := len(buf)
i := int64(n)
signed := i < 0
if signed {
i = -i
}
for {
pos--
buf[pos],i/10
if i == 0 {
if signed {
pos--
buf[pos] = '-'
}
return string(buf[pos:])
}
}
}
func String2(n int32) string {
buf := [11]byte{}
pos := len(buf)
i,q := int64(n),int64(0)
signed := i < 0
if signed {
i = -i
}
for {
pos--
q = i / 10
buf[pos],i = '0'+byte(i-10*q),q
if i == 0 {
if signed {
pos--
buf[pos] = '-'
}
return string(buf[pos:])
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
