【问题标题】:Int to string in go? [duplicate]Int 串入 go? [复制]
【发布时间】:2019-01-28 20:51:45
【问题描述】:

我真的认为这很简单:

string(myInt)

好像没有。

我正在编写一个函数,它接受一个整数切片,并将每个整数附加到一个字符串 - 并在每个整数之间添加一个分隔符。这是我的代码。

func(xis *Int16Slice) ConvertToStringWithSeparator(separator string) string{
    var buffer bytes.Buffer
    for i, value := range *xis{
        buffer.WriteString(string(value))
        if i != len(*xis) -1 {
            buffer.WriteString(separator)
        }
    }
    return buffer.String()
}

请阅读下面的句子。这不是 How to convert an int value to string in Go? 的重复 - 因为: 我知道 strconv.Itoa 函数之类的东西,但它似乎只适用于“常规”整数。它不支持 int16

【问题讨论】:

  • 不是重复的。我问题的最后一句话指出,Itoa 函数(该问题的解决方案,使用标准 int 类型)不支持我这里的数据。
  • 内联转换:strconv.Itoa(int(value))
  • 如何将字符串转换为 int 的问题是绝对有效的!我想 ConvertToStringWithSeparator 不是问题的主要主题,而是与另一个任务相关的东西,这使得答案更广泛。例如,在我个人看来,我会考虑更多可以组合以实现 ConvertToStringWithSeparator 目标的小事情来解决您的问题,因此首先转换标量值,然后将转换应用于切片的每个元素,然后应用将切片中的所有元素连接成由给定字符分隔的字符串的连接。
  • strconv.Itoa(int(i))(int 到 ASCII)或 fmt.Sprintf("%d", i) 将 int 设置为字符串。请参阅 stackoverflow.com/a/62737936/12817546stackoverflow.com/a/62740786/12817546strconv.Atoi(s)(ASCII 到 int)将字符串设置为 int。见stackoverflow.com/a/62740786/12817546

标签: go


【解决方案1】:

您可以使用strconv.Itoa(或strconv.FormatInt,如果性能很关键),只需将int16 转换为intint64,例如(Go Playground):

x := uint16(123)
strconv.Itoa(int(x))            // => "123"
strconv.FormatInt(int64(x), 10) // => "123"

请注意,根据简单的基准测试,strconv.FormatInt(...) 可能会稍微快一些:

// itoa_test.go
package main

import (
  "strconv"
  "testing"
)

const x = int16(123)

func Benchmark_Itoa(b *testing.B) {
  for i := 0; i < b.N; i++ {
    strconv.Itoa(int(x))
  }
}

func Benchmark_FormatInt(b *testing.B) {
  for i := 0; i < b.N; i++ {
    strconv.FormatInt(int64(x), 10)
  }
}

$ go test -bench=. ./itoa_test.go运行:

goos: darwin
goarch: amd64
Benchmark_Itoa-8            50000000            30.3 ns/op
Benchmark_FormatInt-8       50000000            27.8 ns/op
PASS
ok      command-line-arguments  2.976s

【讨论】:

  • 我喜欢这个答案。我们需要更多像你这样的人。
【解决方案2】:

你可以使用 Sprintf:

  num := 33
  str := fmt.Sprintf("%d", num)
  fmt.Println(str)

或伊托亚

str := strconv.Itoa(3)

【讨论】:

  • Sprintf 很昂贵,因为它会创建项目,如果可能的话,我想这样做:P
  • 刚刚编辑了我的答案,使用 strconv.Itoa 添加了另一种方式
【解决方案3】:

您可以将 int16 转换为 int,然后使用 strconv.Itoa 函数将 int16 转换为字符串。

例如:https://play.golang.org/p/pToOjqDKEoi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多