我有一个接收a的函数,[]byte
但是我所拥有的a是进行int
此转换的最佳方法是什么?
err = a.Write([]byte(myInt))
我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。
我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该encoding/binary
库。OP建议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()
在此处执行了一些您根本不需要的运行时决策,也许您可以直接调用编码函数,看看它是否更好。
像这样:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
bs := make([]byte, 4)
binary.LittleEndian.PutUint32(bs, 31415926)
fmt.Println(bs)
}
让我们知道这是如何执行的。
否则,如果您只是尝试获取整数的ASCII表示形式,则可以获取字符串表示形式(可能带有strconv.Itoa
),并将该字符串转换为[]byte
类型。
package main
import (
"fmt"
"strconv"
)
func main() {
bs := []byte(strconv.Itoa(31415926))
fmt.Println(bs)
}
问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法:
问题内容: 我正在使用以下方式读取文件: 我在这里发现。可以转换为吗?将转换为会占用更多空间吗? 编辑:我的文件包含数百万个整数,例如, 100000000 200000000 .....(使用普通的int文件写入)。我读到字节缓冲区。现在,我想将其包装到IntBuffer数组中。怎么做 ?我不想将每个字节转换为int。 问题答案: 您已经在注释中说过,您希望输入数组中的四个字节对应于输出数组中的
问题内容: 我想执行转换而不求助于某些依赖于实现的技巧。有小费吗? 问题答案: 您需要知道字节的字节序。 假设(例如@ WhiteFang34),其是一个长度为4的,然后… … 大端: 小端:
问题内容: 如何将(大字节序)可变大小的二进制字节数组转换为(无符号)整数/长整数?例如,代表4404 现在,我正在使用 它虽然很小,但有点可读,但可能效率不高。有没有更好(更明显)的方法? 问题答案: 传统上,Python对于“大尾数C布局中的数字”用处不大,而对于C来说则用不了太多。(如果要处理2字节,4字节或8字节的数字,那么答案就是) 但是足够多的人厌倦了没有一种明显的方法可以做到这一点,
问题内容: 我知道Java不允许无符号类型,所以我想知道它如何将整数转换为字节。假设我有一个值为255的整数a,并且将该整数转换为一个字节。该值表示在字节11111111中吗?换句话说,该值是否更多地视为带符号的8位整数,还是仅直接复制该整数的后8位? 问题答案: 这称为缩小原始转换。根据规格: 将有符号整数缩小为整数类型 T会 简单地丢弃除 n个 最低阶位以外的所有位,其中 n 是用于表示类型