我正在写一个自定义压缩算法在C读取ascii字符,从每个删除第一位(因为它将始终为0),然后将其粘贴到一个新的文件中。它使输入7/8为原始大小。这里的压缩:自定义压缩算法
#include <stdio.h>
int main()
{
int i = 1;
int c;
unsigned short value = 0;
while((c = getchar()) != EOF)
{
value = (c << i) | value;
if(i != 1) putchar(value >> 8);
value = value << 8;
i++;
if(i == 9) i = 1;
}
if(i != 1) putchar(value >> 8);
}
和这里的减压:
#include <stdio.h>
int main() {
int i = 1;
int c;
unsigned char value = 0;
while((c = getchar()) != EOF) {
value = (c >> i) | value;
putchar(value);
value = (c << (8-i)) | 0;
value = value >> 1;
if(++i == 8) {
putchar(value);
i = 1;
}
}
}
如果我压缩像“ororororor”(不带引号),然后解压,然后输出为“orororor.r “,那里的”。“是十六进制的7F。但是,如果我给它“ororororrr”,那么它输出“orororrr”,这是正确的。它只有在某些输入时才会失败,但我无法找到一个模式来解决它。
对不起,这不是功能。我一直在使用它的方式是在UNIX中使用以下命令:
echo -n your input here > data
gcc compress.c
./a.out <data> inp
gcc decompress.c
./a.out <inp> out
hexdump -C out
即固定它!我以为我正在用'value = c << 8-i |将它归零0',因为它或0或0,但我想这不是正确清除它的第8个字符。 – mottese