Как закодировать структуру в двоичный файл с упаковкой битов в Golang

#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 , а затем сжать его. Работа с битами усложняет задачу. Только вы знаете стоимость вашего варианта использования, но, возможно, это альтернатива для вас.