Я пытаюсь реализовать в Go простой синтаксический анализатор для формата файла sancov https://clang.llvm.org/docs/SanitizerCoverage.html#sancov-data-format
формат в основном первые 8 байтов, это магическое значение 0xC0BFFFFFFFFFFF64 или 0xC0BFFFFFFFFFFF32 с последним байтоммагическое значение, определяющее размер оставшихся смещений.
однако я не знаю, как сравнить шестнадцатеричное значение с байтовым значением в Go, например
package main
import (
"fmt"
"log"
"os"
)
func main() {
path := "test.exe.16900.sancov"
f, err := os.Open(path)
if err != nil {
log.Fatal("Error while opening file", err)
}
for {
data := make([]byte, 8)
// ignoring errors for now
bytesread, _ := f.Read(data)
if bytesread == 0 {
break
}
fmt.Printf("value: %x read %d bytes\n", data, bytesread)
//"64ffffffffffbfc0"
if data == 0xC0BFFFFFFFFFFF64 { // this is not valid
fmt.Println("64 bit header found")
}
}
}
что мне здесь не хватает?
вывод (при удалении последнего оператора if) выглядит следующим образом
PS C:\Users\user\src\test> go run main.go
value: 64ffffffffffbfc0 read 8 bytes
value: 3b10004001000000 read 8 bytes
value: 7c10004001000000 read 8 bytes