在Golang中将int32转换为字符串

我需要在Golang中将转换int32string。是否有可能转换int32string在Golang无须转换为intint64第一?

Itoa需要一个intFormatInt需要一个int64

回答:

一线的答案是fmt.Sprint(i)

无论如何,甚至在标准库函数(例如)内部都有很多转换,fmt.Sprint(i)因此您有一些选择(尝试使用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 = '0'+byte(i%10), 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:])

}

}

}

以上是 在Golang中将int32转换为字符串 的全部内容, 来源链接: utcz.com/qa/434961.html

回到顶部