我正在嘗試編寫一個程序來將二進制文件讀入 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()))
}
- 1 回答
- 0 關(guān)注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消