Last active
July 25, 2023 00:06
-
-
Save gahfy/2f6d393ce0b32f3a49ea8c5ed5f887c6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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