#go
#Вперед
Вопрос:
В Python, используя struct
модуль, я могу сделать что-то вроде этого, чтобы получить упакованное представление значения в виде строки:
import struct
print struct.pack('L', 64)
"@x00x00x00x00x00x00x00"
struct.unpack('L', '@x00x00x00x00x00x00x00')
(64,)
Я хотел бы сделать что-то подобное в Go, за исключением того, что мне немного неясно, как это сделать. Я знаю, что могу сделать что-то вроде этого:
import (
"encoding/binary"
"fmt"
)
bs := make([]byte, 8)
binary.PutUvarint(bs, uint64(64))
fmt.Printf("%s", bs)
"@"
Но это совсем другое и, вероятно, не то, чего я хочу.
Ответ №1:
Да, «кодирование / двоичный код» — это то, что вы хотите, вам просто не нужен формат переменной длины.
https://play.golang.org/p/e81LuPO_JR
bs := make([]byte, 8)
binary.LittleEndian.PutUint64(bs, uint64(64))
fmt.Printf("%#vn", bs)
i := binary.LittleEndian.Uint64(bs)
fmt.Println(i)
Комментарии:
1. @cliquot-the-dog, JFTR имеет в виду, что
encoding/binary
он способен маршалировать и разархивировать двоичные данные из значений / в переменные пользовательскихstruct
типов (путемreflect
изменения их структуры), поэтому часто можно «распаковывать» сложные двоичные строки прямо в пользовательскиеstruct
файлы и обратно.2. @xaav: Я не уверен, что вы имеете в виду, этот пример сам декодирует ненулевой аргумент.
Ответ №2:
Есть пара интересных решений.
1-й — это суть, которой легко следовать, и ее ограничения очевидны:
https://gist.github.com/cloveryume/9a59e8d77f5836f11720#file-golang_struct_packed-go
2-й — это пакет, который пытается выполнить задание по упаковке: