Нужно закодировать\декодировать файл, который содержит числа, для сжатия данных.
Можно все чила(0-9) закодировать не целым байтом, а половиной.
Как ето реализовать на практике?
Дошёл до следующего: (Если будут другие идеи то с радостью вислушаю)
Можно все чила(0-9) закодировать не целым байтом, а половиной.
Как ето реализовать на практике?
Дошёл до следующего: (Если будут другие идеи то с радостью вислушаю)
C++:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
typedef unsigned char byte;
byte pack(byte higher, byte lower)
{
return (higher << 4) + lower;
}
void unpack(byte val, byte *higher, byte *lower)
{
*lower = val & 15;
*higher = val >> 4;
}
void print_digit(const char *message, byte digit)
{
if(message != NULL)
printf("%s ", message);
printf("%u\n", (unsigned) digit);
}
int main(void)
{
setlocale(LC_ALL,".1251");
FILE * f;
FILE * FileIn;
FILE * FileOut;
unsigned char Arr[10000] = {0};
byte symb1;
byte x = 3, y = 2, packed = pack(x,y);
puts("Before packing:");
FileIn = fopen("InCode.txt","rb");
FileOut = fopen("OutCode.txt","w+");
printf("Coding : \n");
while (!feof(FileIn))
{
symb1=getc(FileIn);//Где-то здесь нужно доделать.Что бы читался двоичный код символа и к нему и следующему применялвсь функция pack.
symb1=symb1+3;
// fread((void*)&buffer,sizeof(byte),2,FileIn);
//symb1=symb1-'0';
fprintf(FileOut,"%c",pack(symb1,symb1+1));
printf("%c +1---%c %c\n",symb1,(symb1+1),pack(symb1,symb1+1));
//symb1=symb1+3;
}
fclose(FileIn);
fclose(FileOut);
//exit(EXIT_SUCCESS);
getch();
return 0;
}