• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

Akerlem

К удалению 21.01.2019
19.11.2012
1
0
BIT
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;
}
 
R

rrrFer

Можно все чила(0-9) закодировать не целым байтом, а половиной.
от 0 до 128 тогда, но при этом в исходном файле не должно быть значения больше 128
если в файле нечетное число байт - программа упадет?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!