Skip to content

Instantly share code, notes, and snippets.

@gahfy
Last active July 25, 2023 00:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gahfy/2f6d393ce0b32f3a49ea8c5ed5f887c6 to your computer and use it in GitHub Desktop.
Save gahfy/2f6d393ce0b32f3a49ea8c5ed5f887c6 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bzlib.h>
int main() {
// Le message "Hello World" à compresser
const char *message = "Hello World";
// Données pour la compression
char compressed_data[4096];
int compression_status;
bz_stream bzip2_stream;
// Taille du message original et de sa version compressée
int original_size = strlen(message) + 1; // +1 pour inclure le caractère null de fin de chaîne
int compressed_size;
// Initialisation de la structure bz_stream
memset(&bzip2_stream, 0, sizeof(bz_stream));
bzip2_stream.next_in = (char *)message;
bzip2_stream.avail_in = original_size;
bzip2_stream.next_out = compressed_data;
bzip2_stream.avail_out = sizeof(compressed_data);
// Initialisation du compresseur
BZ2_bzCompressInit(&bzip2_stream, 5, 0, 0);
// Compression du message
compression_status = BZ_RUN_OK;
while (compression_status == BZ_RUN_OK) {
compression_status = BZ2_bzCompress(&bzip2_stream, BZ_RUN);
}
BZ2_bzCompressEnd(&bzip2_stream);
if (compression_status == BZ_FINISH_OK || compression_status == BZ_STREAM_END) {
// Taille réelle des données compressées
compressed_size = sizeof(compressed_data) - bzip2_stream.avail_out;
// Affichage du message compressé
printf("Message compressé : ");
for (int i = 0; i < compressed_size; i++) {
printf("%02x ", compressed_data[i] & 0xFF);
}
printf("\n");
// Décompression du message pour vérification
char decompressed_data[4096];
int decompression_status;
bz_stream bz_stream_decompress;
// Initialisation de la structure bz_stream pour la décompression
memset(&bz_stream_decompress, 0, sizeof(bz_stream));
bz_stream_decompress.next_in = compressed_data;
bz_stream_decompress.avail_in = compressed_size;
bz_stream_decompress.next_out = decompressed_data;
bz_stream_decompress.avail_out = sizeof(decompressed_data);
// Initialisation du décompresseur
BZ2_bzDecompressInit(&bz_stream_decompress, 0, 0);
// Décompression du message
decompression_status = BZ_RUN_OK;
while (decompression_status == BZ_RUN_OK) {
decompression_status = BZ2_bzDecompress(&bz_stream_decompress);
}
BZ2_bzDecompressEnd(&bz_stream_decompress);
if (decompression_status == BZ_STREAM_END) {
// Affichage du message décompressé
printf("Message décompressé : %s\n", decompressed_data);
} else {
fprintf(stderr, "Erreur lors de la décompression.\n");
}
} else {
fprintf(stderr, "Erreur lors de la compression.\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment