我有一个接收[]byte
的函数,但我有的是int
,进行此转换的最佳方式是什么?
err = a.Write([]byte(myInt))
我想我可以走很长的路,把它变成一个字符串,并把它变成字节,但它听起来很难听,我想有更好的方法来做到这一点.
我有一个接收[]byte
的函数,但我有的是int
,进行此转换的最佳方式是什么?
err = a.Write([]byte(myInt))
我想我可以走很长的路,把它变成一个字符串,并把它变成字节,但它听起来很难听,我想有更好的方法来做到这一点.
我同意头脑风暴的方法:假设你传递的是一个机器友好的二进制表示,使用encoding/binary
库.OP建议binary.Write()
可能会有一些开销.对于Write()
的实现,我看the source,它做了一些运行时决策,以获得最大的灵活性.
func Write(w io.Writer, order ByteOrder, data interface{}) error {
// Fast path for basic types.
var b [8]byte
var bs []byte
switch v := data.(type) {
case *int8:
bs = b[:1]
b[0] = byte(*v)
case int8:
bs = b[:1]
b[0] = byte(v)
case *uint8:
bs = b[:1]
b[0] = *v
...
对吗?write()接受一个非常通用的data
第三个参数,这会增加一些开销,因为Go运行时会被迫编码类型信息.由于Write()
在这里执行一些在您的情况下根本不需要的运行时决策,也许您可以直接调用编码函数,看看它是否执行得更好.
大概是这样的:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
bs := make([]byte, 4)
binary.LittleEndian.PutUint32(bs, 31415926)
fmt.Println(bs)
}
让我们知道这是如何执行的.
否则,如果您只是try 获取整数的ASCII表示形式,则可以获取字符串表示形式(可能为strconv.Itoa
),并将该字符串转换为[]byte
类型.
package main
import (
"fmt"
"strconv"
)
func main() {
bs := []byte(strconv.Itoa(31415926))
fmt.Println(bs)
}