コード例 #1
0
/**
 * 将压缩数据之后的文件还原成压缩之前的文件
 */
void lz77_uncompress_test(){

    FILE *file = NULL;
    file = fopen("D:/c_note.lz77", "rb");
    if (file == NULL) {
        printf("open file err\n");
        return;
    }

    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    fseek(file, 0, SEEK_SET);

    unsigned char *buf = (unsigned char *)malloc(size * sizeof(unsigned char));
    memset(buf, 0, size * sizeof(unsigned char));

    fread((void *)buf, size, sizeof(unsigned char), file);
    fclose(file);

    printf("%s\n", "read to buf end");

    unsigned char * original;
    if((size = lz77_uncompress(buf, &original)) <= 0) {
        printf("%s\n", "uncompress fail");
        return;
    }

//    printf("%s\n", *original);

    FILE *file2 = NULL;
    file2 = fopen("D:/c_note2.txt", "wb");
    if (file2 == NULL) {
        printf("%s\n", "write file open err");
        return;
    }

    fwrite((const void *)(original), size, sizeof(unsigned char), file2);
    printf("%s\n", "write file end");

    fclose(file2);
    return;
}
コード例 #2
0
ファイル: ex-1.c プロジェクト: whatot/ma_c
int main(int argc, char **argv)
{

	FILE *fp;

	unsigned char original[DATSIZ], *compressed, *restored;

	int csize, osize, rsize, c, i;

/*****************************************************************************
*                                                                            *
*  Read some data to compress.                                               *
*                                                                            *
*****************************************************************************/

	if ((fp = fopen("sample.txt", "r")) == NULL)
		return 1;

	i = 0;

	while ((c = getc(fp)) != EOF && i < DATSIZ) {

		original[i] = c;
		i++;

	}

	osize = i;
	fclose(fp);

/*****************************************************************************
*                                                                            *
*  Compress the data using Huffman coding.                                   *
*                                                                            *
*****************************************************************************/

	fprintf(stdout, "Compressing with Huffman coding\n");
	fprintf(stdout, "Compressing...");

	if ((csize = huffman_compress(original, &compressed, osize)) < 0) {

		fprintf(stdout, "\n");
		return 1;

	}

	fprintf(stdout, "Done\n");
	fprintf(stdout, "Uncompressing...");

	if ((rsize = huffman_uncompress(compressed, &restored)) < 0) {

		fprintf(stdout, "\n");
		free(compressed);
		return 1;

	}

	fprintf(stdout, "Done\n");
	fprintf(stdout, "osize=%d, csize=%d, rsize=%d\n", osize, csize, rsize);

	if (rsize != osize) {

		fprintf(stdout, "Data was not properly restored\n");
		free(compressed);
		free(restored);
		return 1;

	}

	else {

		for (i = 0; i < rsize; i++) {

			if (original[i] != restored[i]) {

				fprintf(stdout,
					"Data was not properly restored\n");

				if (isgraph(original[i]))
					fprintf(stdout, "original[%d]=\"%c\"\n",
						i, original[i]);
				else
					fprintf(stdout, "original[%d]=0x%02x\n",
						i, original[i]);

				if (isgraph(restored[i]))
					fprintf(stdout, "restored[%d]=\"%c\"\n",
						i, restored[i]);
				else
					fprintf(stdout, "restored[%d]=0x%02x\n",
						i, restored[i]);

				free(compressed);
				free(restored);
				return 1;

			}

		}

	}

	fprintf(stdout, "Data was restored OK\n");

	free(compressed);
	free(restored);

/*****************************************************************************
*                                                                            *
*  Compress some data using LZ77.                                            *
*                                                                            *
*****************************************************************************/

	fprintf(stdout, "Compressing with LZ77\n");
	fprintf(stdout, "Compressing...");

	if ((csize = lz77_compress(original, &compressed, osize)) < 0)
		return 1;

	fprintf(stdout, "Done\n");
	fprintf(stdout, "Uncompressing...");

	if ((rsize = lz77_uncompress(compressed, &restored)) < 0) {

		fprintf(stdout, "\n");
		free(compressed);
		return 1;

	}

	fprintf(stdout, "Done\n");
	fprintf(stdout, "osize=%d, csize=%d, rsize=%d\n", osize, csize, rsize);

	if (rsize != osize) {

		fprintf(stdout, "Data was not properly restored\n");
		free(compressed);
		free(restored);
		return 1;

	}

	else {

		for (i = 0; i < rsize; i++) {

			if (original[i] != restored[i]) {

				fprintf(stdout,
					"Data was not properly restored\n");

				if (isgraph(original[i]))
					fprintf(stdout, "original[%d]=\"%c\"\n",
						i, original[i]);
				else
					fprintf(stdout, "original[%d]=0x%02x\n",
						i, original[i]);

				if (isgraph(restored[i]))
					fprintf(stdout, "restored[%d]=\"%c\"\n",
						i, restored[i]);
				else
					fprintf(stdout, "restored[%d]=0x%02x\n",
						i, restored[i]);

				free(compressed);
				free(restored);
				return 1;

			}

		}

	}

	fprintf(stdout, "Data was restored OK\n");

	free(compressed);
	free(restored);

	return 0;

}