typedef struct structure {unsigned char id; int count; char code[10];} STRUCTURE;
id - поле для символа
count - число вхождений символа
code[10] - сам код
mas - массив структур
перед выводом в выходной файл массив структур упорядочен по убыванию (убыванию поля count)
как вспомогательный используется массив char mas_code[255][10] (массив содержит в нулевом столбце количество вхождений символа, в остальных коды из 0 и 1)
а вот что делать с этим самым побайтовым выводом - не получается.....
как бы попытки есть...но записывается несовсем правильно не совсем правильно...
int get_byte(char mas_code[255][10],STRUCTURE *mas)
{ unsigned char mask;
mask=0x00;
FILE *f, *g;
char str[60];
int pos_m=8; // pos_m - свободные места в маске
int pos_c, st=0; // pos_c - очерёдное место в коде некоторого символа
f=fopen("1.txt", "r+t");
g=fopen("2.txt", "w");
char x;
while(!feof(f))
{ if (pos_m) { x=fgetc(f);
st=0;
while ( mas[st].id!=x)
st++;
pos_c=1;
while ((pos_m)&&(pos_c<=mas_code[st][0]))
{ mask=mask<<1;
mask|=mas_code[st][pos_c];
pos_m--;
pos_c++;
}
}
else {fprintf(g,"%0x", mask);
itoa(mask,str,2);
printf("%s", str);
printf(" ");
mask=0x00;
pos_m=8;
if (pos_c<=mas_code[st][0])
{ while ((pos_m)&&(pos_c<=mas_code[st][0]))
{ mask<<1;
mask=mask|mas_code[st][pos_c];
pos_m--;
pos_c++;
}
}
}
}
fclose(f);
fclose(g);
return 8-pos_m; // возвращаем кол-во бит, задействованных в последнем байте - нужно по заданию
}
Сообщение отредактировано: 18192123 -