Golang中如何将int8和int16转换为字符串?

Golang中如何将int8和int16转换为字符串? 大家好,

有人能告诉我如何将 int8 或 int16 转换为字符串吗?

5 回复

strconv 包对你有帮助吗?

更多关于Golang中如何将int8和int16转换为字符串?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我确实查看了那个方法,但 strconv 是针对 int64 的,而我需要的是针对 int8int16 的。

你可以无损地将 int8int16 转换为 int64

你好,

当你将 int8int16 转换为字符串时,其大小会变得比 int64 还要大。在转换为字符串之前先转换为 int64 是可以的。请查看以下代码。

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var i1 int8 = 1
    var i2 int64 = int64(i1)
    var s1 string = "1"

    fmt.Printf("Size of i1 (int8)  : %v byte\n", unsafe.Sizeof(i1))
    fmt.Printf("Size of i2 (int64) : %v bytes\n", unsafe.Sizeof(i2))
    fmt.Printf("Size of s1 (string): %v bytes\n", unsafe.Sizeof(s1))
}

输出:

Size of i1 (int8)  : 1 byte
Size of i2 (int64) : 8 bytes
Size of s1 (string): 16 bytes

在Go语言中,将int8或int16转换为字符串主要有以下几种方法:

1. 使用strconv.Itoa()(需要先转换为int)

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var a int8 = 42
    var b int16 = 1000
    
    // int8转字符串
    str1 := strconv.Itoa(int(a))
    fmt.Println(str1) // 输出: "42"
    
    // int16转字符串
    str2 := strconv.Itoa(int(b))
    fmt.Println(str2) // 输出: "1000"
}

2. 使用strconv.FormatInt()

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var a int8 = -50
    var b int16 = 32767
    
    // int8转字符串
    str1 := strconv.FormatInt(int64(a), 10)
    fmt.Println(str1) // 输出: "-50"
    
    // int16转字符串
    str2 := strconv.FormatInt(int64(b), 10)
    fmt.Println(str2) // 输出: "32767"
}

3. 使用fmt.Sprintf()

package main

import "fmt"

func main() {
    var a int8 = 127
    var b int16 = -20000
    
    // int8转字符串
    str1 := fmt.Sprintf("%d", a)
    fmt.Println(str1) // 输出: "127"
    
    // int16转字符串
    str2 := fmt.Sprintf("%d", b)
    fmt.Println(str2) // 输出: "-20000"
}

4. 使用strconv.AppendInt()(高效拼接场景)

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var a int8 = 99
    var b int16 = 255
    
    // 将int8转换为字节切片再转字符串
    buf1 := make([]byte, 0, 4)
    buf1 = strconv.AppendInt(buf1, int64(a), 10)
    str1 := string(buf1)
    fmt.Println(str1) // 输出: "99"
    
    // 将int16转换为字节切片再转字符串
    buf2 := make([]byte, 0, 6)
    buf2 = strconv.AppendInt(buf2, int64(b), 10)
    str2 := string(buf2)
    fmt.Println(str2) // 输出: "255"
}

性能比较

  • strconv.Itoa()strconv.FormatInt() 性能最好
  • fmt.Sprintf() 使用方便但性能稍差
  • strconv.AppendInt() 适合需要拼接多个值的场景

推荐使用 strconv.Itoa() 方法,代码简洁且性能良好。

回到顶部