在C語言中,對數據集進行壓縮可以通過多種算法來實現,例如LZ77、Huffman編碼、Lempel-Ziv-Welch (LZW)等。以下是一個使用LZ77算法進行數據壓縮的簡單示例:
liblzip
。在Debian/Ubuntu系統上,可以使用以下命令安裝:sudo apt-get install liblzip-dev
在macOS上,可以使用Homebrew安裝:
brew install lzip
compress.c
,并添加以下代碼:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <lzip/lzip.h>
void compress(const char *input_file, const char *output_file) {
FILE *input = fopen(input_file, "rb");
if (!input) {
perror("Error opening input file");
return;
}
FILE *output = fopen(output_file, "wb");
if (!output) {
perror("Error opening output file");
fclose(input);
return;
}
lzip_file *lf = lzip_open(input, LZIP_OPT_BESTSPEED);
if (!lf) {
perror("Error opening lzip file");
fclose(input);
fclose(output);
return;
}
unsigned char buffer[65536];
size_t read;
size_t compressed_size = 0;
while ((read = lzip_read(lf, buffer, sizeof(buffer))) > 0) {
size_t written = fwrite(buffer, 1, read, output);
if (written != read) {
perror("Error writing to output file");
lzip_close(lf);
fclose(input);
fclose(output);
return;
}
compressed_size += read;
}
if (lzip_close(lf) != 0) {
perror("Error closing lzip file");
fclose(input);
fclose(output);
return;
}
printf("Compressed size: %zu bytes\n", compressed_size);
fclose(input);
fclose(output);
}
int main() {
compress("input.txt", "output.lz");
return 0;
}
gcc compress.c -o compress -llzip
./compress
這將壓縮input.txt
文件并將其保存為output.lz
。
請注意,這只是一個簡單的示例,實際應用中可能需要根據具體需求對算法進行調整。另外,壓縮和解壓縮數據通常需要相應的庫支持,因此在選擇壓縮方法時要考慮庫的可用性和性能。