Разделить байт на полубайты и по двум полубайтам получить байт
Не могу добиться нужной работы от структуры в enum. Мне нужно из двух полубайт (тетрад) получать байт в подобной структуре. Для компактной записи у меня в одной тетраде длина (0-F) а во второй длина индексов 0-F (алгоритм LZ78). Получая значения к примеру 0х08 и 0х0F мне нужно чтобы в структуре оно объединялось в байт, который можно прочитать как 0x8F. Помогите написать структуру правильно :) Я где-то рядом с решением. Добавил пояснения к коду.
struct BYTE{
unsigned char L:4; //Где-то в примерах unsigned L:4;
unsigned char H:4; //Но не работает всё равно :(
};
union Byte{
unsigned char byte;
struct BYTE LH;
};
union Byte DILen;
unsigned char D[16];//Словарь символов из строки
unsigned char I[16];//Индексы ссылки на символы словаря
unsigned char DC,IC;//Счетчики словаря и индексов, для подсчета их кол-ва
int main(){
DC = 0x09;//В словаре 9 символов
IC = 0x0F;//И 15 индексов, ссылок на символы в словаре
DILen.LH.L = DC;//DC это байт от 0 до F (0F max)
DILen.LH.H = IC;//IC от 0 до F (0F max)
//D[0] для хранения тетрадой размера словаря и кол-ва индексов (9F)
D[0] = DILen.byte;//В итоге D[0]=0x09 , вместо 0x9F при значениях DC=0x09 IC=0x0F
}
Вывод программы упаковки по алгоритму LZ78
Str: 'КРАСНАЯ КРАСКА 1' len: 16.
Print Dic&Indx. В D[0] индекс записывать длину словаря F-0 и индексов 0-F
D[0] = I[0] = 0
D[1] = К I[1] = 0
D[2] = Р I[2] = 0
D[3] = А I[3] = 0
D[4] = С I[4] = 0
D[5] = Н I[5] = 3
D[6] = Я I[6] = 0
D[7] = I[7] = 0
D[8] = 1 I[8] = 1
D[9] = I[9] = 2
D[10] = I[10] = 3
D[11] = I[11] = 4
D[12] = I[12] = 1
D[13] = I[13] = 3
D[14] = I[14] = 7
D[15] = I[15] = 0
DicCount 8[08] IndexCount 15[0F] DILen [09]!Это тетрада DC:IC
При распаковке читаем D[0]=длина словаря F0 длина индексов 0F(полубайты)
Если индекс =0 увел. индекс словаря, иначе символ по инднксу