#go #struct #encoding #binary #bit-packing
#Вперед #структура #кодирование #двоичный #упаковка битов
Вопрос:
Я пытаюсь закодировать большие структуры данных в двоичный файл. Я указал количество битов для каждого элемента структуры. Итак, мне нужно закодировать структуру в двоичный файл в соответствии с длиной бита. Стандартная библиотека Golang Encoding / binary упаковывает каждый элемент минимум в один байт. Поэтому мне нужно другое решение. Как я могу закодировать элементы структуры в качестве указанного номера бита в Go?
Например; Item1 = 00001101 Item2 = 00000110 Результат будет как 01101110
type Elements struct{
Item1 uint8 // number of bits = 5
Item2 uint8 // number of bits = 3
Item3 uint8 // number of bits = 2
Item4 uint64 // number of bits = 60
Item5 uint16 // number of bits = 11
Item6 []byte // bit length = 8
Item7 Others
}
type Others struct{
Other1 uint8 // number of bits = 4
Other2 uint32 // number of bits = 21
Other3 uint16 // number of bits = 9
}
Комментарии:
1. Будет ли каждый элемент содержать только одно значение, т.Е. задано только одно из
Elements
полей struct? Или все 5 полей потенциально заданы и их необходимо маршалировать / отменять маршалирование?2. Используйте битовые сдвиги и побитовые операции , чтобы собрать нужные байты. Поскольку у вас всего 82 бита, а наименьшей единицей данных является байт, вам где-то понадобится шесть бит заполнения.
3. @colm.anseo Каждый элемент содержит одно значение.
4. Возможно, вам захочется подумать о другом решении вашей проблемы, возможно, закодировать все ваши объекты с помощью
encoding/binary
, а затем сжать его. Работа с битами усложняет задачу. Только вы знаете стоимость вашего варианта использования, но, возможно, это альтернатива для вас.