我有一个接收a的函数,[]byte但是我所拥有的a是进行int此转换的最佳方法是什么?
[]byte
int
err = a.Write([]byte(myInt))
我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。
我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该encoding/binary库。OP建议binary.Write()可能会有一些开销。纵观源的实施Write(),我看到它做了一些运行时的决策最大的灵活性。
encoding/binary
binary.Write()
Write()
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()在此处执行了一些您根本不需要的运行时决策,也许您可以直接调用编码函数,看看它是否更好。
data
像这样:
package main import ( "encoding/binary" "fmt" ) func main() { bs := make([]byte, 4) binary.LittleEndian.PutUint32(bs, 31415926) fmt.Println(bs) }
让我们知道这是如何执行的。
否则,如果您只是尝试获取整数的ASCII表示形式,则可以获取字符串表示形式(可能带有strconv.Itoa),并将该字符串转换为[]byte类型。
strconv.Itoa
package main import ( "fmt" "strconv" ) func main() { bs := []byte(strconv.Itoa(31415926)) fmt.Println(bs) }