Go 如何写入最低24位单元?
我可以用二进制写32位。用上面的代码写。如果我想写uint32的最低24位,我可以用binary.write来写。或者我最好提取每个最低的8位,并将它们写入字节数组Go 如何写入最低24位单元?,go,Go,我可以用二进制写32位。用上面的代码写。如果我想写uint32的最低24位,我可以用binary.write来写。或者我最好提取每个最低的8位,并将它们写入字节数组 // vim: set noexpandtab tabstop=2: package main import ( "log" "os" "encoding/binary" ) func main() { x := uint32(1)
// vim: set noexpandtab tabstop=2:
package main
import (
"log"
"os"
"encoding/binary"
)
func main() {
x := uint32(1)
err := binary.Write(os.Stdout, binary.LittleEndian, x)
if err != nil { log.Fatal(err) }
}
您可以通过两种方式执行此操作: 通用内联;或 自定义类型 一般的 利用任何io.Writer(如os.Stdout)的本机写入方法: 快跑./main.go | xxd 00000000: 0102 03 自定义类型 定义自定义类型和方法并匹配接口:
w := os.Stdout // any io.Writer
x := uint32(197121) // any bit-shift capable type, uint64 etc.
// little-endian order
w.Write([]byte{
byte(x),
byte(x >> 8),
byte(x >> 16),
})
使用:
type int24 int32
func (x int24) WriteTo(w io.Writer) (int64, error) {
n, err := w.Write([]byte{
byte(x),
byte(x >> 8),
byte(x >> 16),
})
return int64(n), err
}
%开始跑步。/custom.go | xxd
00000000: 0102 0301 0200 0100 00
不知道go,但一种方法是使用FF000000和dest int32,然后使用源int24。可以这样更快这感觉像是XY问题。你在这里更大的目标是什么?要将一个上限为24位的数字序列写入io.Writer?可能需要创建自己的类型int24 int32,并实现自己的io.Reader以用于此类型?@colm.anseo您可以提供代码吗?这可能是一个,用于命名约定和错误处理。某些人确实获得了所需的较低位。但是OP询问如何有效地将其写入io编写器。对于所有标准类型int32、int64等,都有二进制编码器来实现这一点,但对于自定义类型,则没有二进制编码器,因此需要编写自己的编码器。
type int24 int32
func (x int24) WriteTo(w io.Writer) (int64, error) {
n, err := w.Write([]byte{
byte(x),
byte(x >> 8),
byte(x >> 16),
})
return int64(n), err
}
for _, v := range []int24{
197121, // 01 02 03
513, // 01 02 00
1, // 01 00 00
} {
v.WriteTo(os.Stdout)
}