第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將二進制文件讀入結(jié)構(gòu)和反射 - Go 語言

如何將二進制文件讀入結(jié)構(gòu)和反射 - Go 語言

Go
尚方寶劍之說 2022-11-23 20:37:40
我正在嘗試編寫一個程序來將二進制文件讀入 golang 中的結(jié)構(gòu),方法是使用二進制包讀取二進制文件以填充包含數(shù)組的結(jié)構(gòu),我使用的是數(shù)組而不是切片,因為我想指定字段長度,這似乎工作正常但是當我嘗試使用反射來打印我們的字段值時出現(xiàn)此錯誤恐慌:反映:對數(shù)組值調(diào)用 reflect.Value.Bytes這是代碼package mainimport (    "encoding/binary"    "fmt"    "log"    "os"    "reflect")type SomeStruct struct {    Field1                     [4]byte    Field2                  [2]byte    Field3                [1]byte}func main() {    f, err := os.Open("/Users/user/Downloads/file.bin")    if err != nil {        log.Fatalln(err)    }    defer f.Close()    s := SomeStruct{}    err = binary.Read(f, binary.LittleEndian, &s)    numOfFields := reflect.TypeOf(s).NumField()    ps := reflect.ValueOf(&s).Elem()    for i := 0; i < numOfFields; i++ {        value := ps.Field(i).Bytes()        for j := 0; j < len(value); j++ {            fmt.Print(value[j])        }    }}當我將代碼更改為此package mainimport (    "encoding/binary"    "fmt"    "log"    "os"    "reflect")type SomeStruct struct {    Field1 [4]byte    Field2 [2]byte    Field3 [1]byte}func main() {    f, err := os.Open("/Users/user/Downloads/file.bin")    if err != nil {        log.Fatalln(err)    }    defer f.Close()    s := SomeStruct{}    err = binary.Read(f, binary.LittleEndian, &s)    numOfFields := reflect.TypeOf(s).NumField()    ps := reflect.ValueOf(&s).Elem()    for i := 0; i < numOfFields; i++ {        value := ps.Field(i)        fmt.Print(value)    }}它打印帶有 ascii 表示的數(shù)組,我需要打印 ascii 的 char 表示,當我感到恐慌時想法?
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

字節(jié)文檔說:

字節(jié)返回 v 的基礎(chǔ)值。如果 v 的基礎(chǔ)值不是字節(jié)片段,它會發(fā)生恐慌。

對數(shù)組進行切片以獲得字節(jié)切片:

field := ps.Field(i)

value := field.Slice(0, field.Len()).Bytes()

for j := 0; j < len(value); j++ {

    fmt.Print(value[j])

}

您還可以遍歷數(shù)組:


value := ps.Field(i)

for j := 0; j < value.Len(); j++ {

    fmt.Print(byte(value.Index(j).Uint()))

}


查看完整回答
反對 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號