Кодирование Для Сжатия Данных

Тема в разделе "C/C++/C#", создана пользователем Akerlem, 19 ноя 2012.

  1. Akerlem

    Akerlem New Member

    Регистрация:
    19 ноя 2012
    Сообщения:
    1
    Симпатии:
    0
    Нужно закодировать\декодировать файл, который содержит числа, для сжатия данных.
    Можно все чила(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;
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    от 0 до 128 тогда, но при этом в исходном файле не должно быть значения больше 128
    если в файле нечетное число байт - программа упадет?
     
Загрузка...

Поделиться этой страницей