首頁  >  文章  >  後端開發  >  轉為二進制。讀入資料片給出零結果

轉為二進制。讀入資料片給出零結果

WBOY
WBOY轉載
2024-02-08 22:06:09562瀏覽

轉為二進制。讀入資料片給出零結果

php小編百草在這篇文章中將為大家介紹如何將資料片轉為二進制,並給出零結果。這個過程非常簡單,只需要遵循一些基本規則。首先,將資料片逐一讀入,然後將每個資料片轉為二進位。接下來,對於每個二進制數,如果其中的數字全為零,則給出零結果。透過這種方法,我們可以方便地將資料片轉為二進制,並得到相應的結果。如果你對這個過程有興趣,那就跟著小編一起來學習吧!

問題內容

我想讀取二進位資料並將其寫入文件,而我的資料只是切片。編碼部分正在工作,但我透過 binary.Read 進行的解碼給出了零結果。我做錯了什麼?

data := []int16{1, 2, 3}
    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, data)
    if err != nil {
        fmt.Println("binary.Write failed:", err)
    }
    fmt.Println(buf.Bytes())
    // working up to this point

    r := bytes.NewReader(buf.Bytes())
    got := []int16{}
    if err := binary.Read(r, binary.LittleEndian, &got); err != nil {
        fmt.Println("binary.Read failed:")
    }
    fmt.Println("got:", got)

運行此程式碼給出

[1 0 2 0 3 0]
got: []

遊樂場連結在這裡: https://go.dev/play/p/yZOkwXj8BNv

解決方法

您必須讓切片的大小與您想要從緩衝區讀取的內容一樣大。你得到一個空結果,因為 got 的長度為零。

got := make([]int16, buf.Len()/2)
if err := binary.Read(buf, binary.LittleEndian, &got); err != nil {
    fmt.Println("binary.Read failed:")
}

正如 JimB 所說,您可以直接從緩衝區讀取。

另請參閱 binary.Read

的文檔

以上是轉為二進制。讀入資料片給出零結果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除