Я создаю 4-битную и 8-битную цветовую кодировку для шрифта.Это включает в себя передний план, фон, стиль и формат.Я надеюсь использовать следующую структуру для представления данных в 4-байтовом пакете.Мое намерение состоит в том, чтобы извлечь его как один uint32_t
, который можно преобразовать в двоичные данные и сохранить в файле.
Это то, что у меня сейчас есть:
struct font_pack {
uint8_t : 8;
struct {
uint8_t format : 4;
uint8_t style : 4;
} header;
uint8_t foreground;
uint8_t background;
}
Заголовок содержитдва полубайта.format
говорит, что цветовые коды являются 4-битными или 8-битными.style
- это набор битовых флагов, который объявляет форматер, такой как жирный шрифт и подчеркивание.
Затем я использую следующий union
, чтобы получить необработанный двоичный файл как для записи в файл, так и для установки или печатиданные в шестнадцатеричном формате.
union font_raw {
font_pack pack;
uint32_t data;
}
К сожалению, когда я распечатываю гекс, я получаю 0x04032100
, когда ожидал 0x00120304
.Что заставляет меня чувствовать, что выравнивание байтов не гарантируется в течение union
, и меня поразил порядок байтов.Я просто надеялся, что у меня будет простой метод упаковки и распаковки данных в 3 байта.
Есть ли другой простой способ сделать это, или я застрял в создании более традиционной функции, которая выполняет упаковку и распаковку