我正在寫一個自定義壓縮算法在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