高圧縮の罠

すごく大きなファイルがものすごく小さくなったら、知らずに解凍したひとは大変だなぁ、とかなんとか。

#include<stdio.h>

int main()
{
    long l;
    FILE *fp;
    
    fp = fopen("a.dat","wb");
    if( fp != NULL )
    {
        for(l=0;l<3*1024*1024;l++)
            fwrite(&l,sizeof(long),1,fp);
        fclose(fp);
    }
    
    return 0;
}

こんなプログラムで12MBのファイル(1,2,3,4,・・・と4バイトごとに単純増加していくデータ)を作ってみたけれども

  • .gca ... 2MB
  • .lzh ... 4MB
  • .zip ... 4MB

とあんまし小さくならんかった。差分をとってみればかなりの圧縮になるかと思うけど汎用圧縮には使えない手法か。