📄 incr.cpp
字号:
// Created:10-24-98
// By Jeff Connelly
// Incremental compression
// HIGHLY EXPERIMENTAL!
// Good input data: 00 01 02 03 04 05 06 07 08 09 ...
#include "stdafx.h"
#define EXPORTING
#include "comprlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <string.h>
// Encode incremental
void EXPORT incr_encode()
{
register char c = 0, prev, begin;
register int diff = 0, prevdiff, repeated = 0;
while (!end_of_data())
{
// Previous values (zero first time)
prevdiff = diff;
prev = c;
c = read_byte();
diff = (prev - c); // Figure difference
if (prevdiff == prev) // Repeating differences
{
if (!repeated)
{
begin = c; // Beginning of repeated diffs, store first
}
++repeated;
}
else if (repeated) // End of repeating diffs, write values
{
write_byte(begin);
write_byte(diff);
write_byte(c); // c = end
if (begin - c != diff)
{
printf ("%d - %d != %d\n"
"%d - %d == %d\n",
begin, c, diff,
begin, c, begin - c);
}
repeated = begin = prev = c = diff = prevdiff = 0; // Reset
}
}
}
// Decompress incrementally encoded file
void EXPORT incr_decode()
{
register char begin, incr, end;
register int i;
while (!end_of_data())
{
// Read the values
begin = read_byte();
incr = read_byte();
end = read_byte();
// Decompression is simple: write values from 'begin' to 'end',
// incrementing by 'incr', just use a for loop.
for (i = begin; i < end; i += incr)
write_byte(i);
write_byte(end);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -