func Write(w io.Writer, order ByteOrder, data interface{}) error
Write 函数可以将参数 data 的 binary 编码格式写入参数 w 中,参数 data 必须是定长值、定长值的切片、定长值的指针。参数 order 指定写入数据的字节序,写入结构体时,名字中有_
的字段会置为 0。package main import ( "bytes" "encoding/binary" "fmt" "os" ) type Website struct { Url int32 } func main() { file, err := os.Create("output.bin") for i := 1; i <= 10; i++ { info := Website{ int32(i), } if err != nil { fmt.Println("文件创建失败 ", err.Error()) return } defer file.Close() var bin_buf bytes.Buffer binary.Write(&bin_buf, binary.LittleEndian, info) b := bin_buf.Bytes() _, err = file.Write(b) if err != nil { fmt.Println("编码失败", err.Error()) return } } fmt.Println("编码成功") }运行上面的程序会在当前目录下生成 output.bin 文件,文件内容如下:
0100 0000 0200 0000 0300 0000 0400 0000
0500 0000 0600 0000 0700 0000 0800 0000
0900 0000 0a00 0000
package main import ( "bytes" "encoding/binary" "fmt" "os" ) type Website struct { Url int32 } func main() { file, err := os.Open("output.bin") defer file.Close() if err != nil { fmt.Println("文件打开失败", err.Error()) return } m := Website{} for i := 1; i <= 10; i++ { data := readNextBytes(file, 4) buffer := bytes.NewBuffer(data) err = binary.Read(buffer, binary.LittleEndian, &m) if err != nil { fmt.Println("二进制文件读取失败", err) return } fmt.Println("第", i, "个值为:", m) } } func readNextBytes(file *os.File, number int) []byte { bytes := make([]byte, number) _, err := file.Read(bytes) if err != nil { fmt.Println("解码失败", err) } return bytes }运行结果如下:
go run main.go
第 1 个值为: {1}
第 2 个值为: {2}
第 3 个值为: {3}
第 4 个值为: {4}
第 5 个值为: {5}
第 6 个值为: {6}
第 7 个值为: {7}
第 8 个值为: {8}
第 9 个值为: {9}
第 10 个值为: {10}
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有