如下是利用標準庫binary來進行編解碼ui
解碼
①使用bytes.NewReader/bytes.Buffer來存儲要解碼的ascii串
②使用binary.Read來解碼
編碼
package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var pi float64 bpi := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(bpi) err := binary.Read(buf, binary.LittleEndian, &pi) // 這裏能夠繼續讀出來存在變量裏, 這樣就能夠解碼出來不少, 讀的次序和變量類型要對 // binary.Read(buf, binary.LittlEndian, &v2) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Print(pi) // 3.141592653589793 }
編碼
①使用bytes.Buffer來存儲編碼生成的串
②使用binary.Write來編碼存儲在①的buf中
spa
package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var pi float64 = 3.141592653589793 buf := new(bytes.Buffer) err := binary.Write(buf, binary.LittleEndian, pi) // 這裏能夠繼續往buf裏寫, 都存在buf裏 // binary.Write(buf, binary.LittleEndian, uint16(12345)) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Print(buf.Bytes()) // [24 45 68 84 251 33 9 64] }
Multi模式code
解碼
ci
ingit
編碼 class
package main import ( "bytes" "encoding/binary" "fmt" ) func main() { buf := new(bytes.Buffer) var data = []interface{}{ uint16(61374), int8(-54), uint8(254), } for _, v := range data { err := binary.Write(buf, binary.LittleEndian, v) if err != nil { fmt.Println("binary.Write failed:", err) } } fmt.Printf("%x", buf.Bytes()) // beefcafe 這個是16進制串 // 這裏轉換爲了16進制整數的串? }