如何写出最低的 24 位单元?

// 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) }

}

binary.Write我可以通过上面的代码写 32 位。如果我想写 uint32 的最低 24 位,我可以用binary.Write. 或者我最好提取每个最低 8 位并将它们写为字节数组?


$ go run main.go | xxd

00000000: 0100 0000                                ....


白衣染霜花
浏览 122回答 2
2回答

尚方宝剑之说

您可以通过以下两种方式执行此操作:通用内联;或者自定义类型通用的利用Write任何io.Writer类似的本机方法os.Stdout:w := os.Stdout      // any io.Writerx := uint32(197121) // any bit-shift capable type, uint64 etc.// little-endian orderw.Write([]byte{    byte(x),    byte(x >> 8),    byte(x >> 16),})https://play.golang.org/p/9WSUpX8zYcwgo run ./main.go | xxd00000000: 0102 03自定义类型定义自定义类型和方法并匹配io.WriterTo接口:type int24 int32func (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)}https://play.golang.org/p/IdfM6s_Ytpn% go run ./custom.go |xxd00000000: 0102 0301 0200 0100 00

慕斯709654

不知道去,但一种方法是用 FF000000 与 dest int32 与,然后与源 int24 或与。可以像这样更快
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go