Я пытаюсь создать синтаксический анализатор файлов MOBI, и у меня возникла небольшая проблема с попыткой разобрать некоторые двоичные файлы в структуру с помощью binary.Read ().
I 'Я думаю, что это проблема выравнивания, но я в недоумении, почему я не получаю ожидаемые значения.Я запустил файл .mobi через libmobi, чтобы проверить вывод моего кода, а также проверил двоичный файл .mobi, чтобы убедиться, что я не сумасшедший и код libmobi не делал ничего странного (чтоне).
Вот урезанный пример:
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
type Header struct {
Type [4]byte
Creator [4]byte
Uid uint32
Next uint32
RecordCount uint16
}
func main() {
testBytes := []byte{66, 79, 79, 75, 77, 79, 66, 73, 0, 0, 1, 17, 0, 0, 0, 0, 0, 136}
h := Header{}
buf := bytes.NewBuffer(testBytes)
binary.Read(buf, binary.LittleEndian, &h)
fmt.Printf("%s\n", h.Type) // BOOK, as expected
fmt.Printf("%s\n", h.Creator) // MOBI, as expected
fmt.Printf("%d\n", h.Next) // 0, as expected
fmt.Printf("%d\n", h.Uid)
// expecting Uid to be 273, but it's 285278208...
fmt.Printf("%d\n", h.RecordCount)
// expecting RecordCount to be 136, but it's 34816...
}
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: вот шестнадцатеричные байты от выполнения xxd
вкл book.mobi
:
424f 4f4b 4d4f 4249 0000 0111 0000 0000 0088