Go語言結構體與二進制數組轉換


把結構體當二進制流傳輸是做協議的時候經常用到的功能。要做結構體與字節數組的轉換,在C語言中只要做個指針類型的強制轉換就行了。Go語言里也是有指針的,但是沒有C的指針那么自由,默認的不能做任意類型轉換。Go語言提供更安全的方式。最簡單有效的是使用Gob庫,另外,也可以使用encoding/binary把字節串轉換成結構體。下面是一個使用的例子:

package main

import (
         "fmt"
         "bytes"
         "encoding/binary"
)

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())
}
用指針轉換

當然,結構體和字符串有同樣的內存結構,也能進行指針轉換,雖然這比較容量出錯。

package main

import ( "unsafe"; "fmt")

func main() {
    var a uint = 0xbeefcafe
    fmt.Println( *( * byte)( unsafe.Pointer( &a)))
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM