Little changes and debug

This commit is contained in:
2025-10-01 09:49:27 +02:00
parent 821c3ea016
commit a4ad553067
6 changed files with 624 additions and 68 deletions

View File

@ -3,7 +3,8 @@
#include <stdlib.h>
#include <string.h>
// Lire un fichier binaire et en faire un tableau de bits (0/1)
// files.c corrections : MSB-first within each byte
bit_array file_to_bits(const char *filename) {
bit_array arr = {0};
@ -13,7 +14,6 @@ bit_array file_to_bits(const char *filename) {
return arr;
}
// Taille fichier
fseek(f, 0, SEEK_END);
long file_size = ftell(f);
rewind(f);
@ -23,27 +23,19 @@ bit_array file_to_bits(const char *filename) {
return arr;
}
// Lire tous les octets
uint8_t *raw = (uint8_t*)malloc(file_size);
if (!raw) {
fclose(f);
return arr;
}
if (!raw) { fclose(f); return arr; }
fread(raw, 1, file_size, f);
fclose(f);
// Convertir en bits (0/1 dans uint8_t)
arr.nb_bits = (size_t)file_size * 8;
arr.bits = (uint8_t*)malloc(arr.nb_bits);
if (!arr.bits) {
free(raw);
arr.nb_bits = 0;
return arr;
}
arr.bits = (uint8_t*)malloc(arr.nb_bits * sizeof(uint8_t));
if (!arr.bits) { free(raw); arr.nb_bits = 0; return arr; }
// MSB-first in each byte: bit 7 -> index 0, bit 0 -> index 7
for (size_t i = 0; i < (size_t)file_size; i++) {
for (int b = 0; b < 8; b++) {
arr.bits[i * 8 + b] = (raw[i] >> b) & 1u;
arr.bits[i * 8 + b] = (raw[i] >> (7 - b)) & 1u;
}
}
@ -51,7 +43,6 @@ bit_array file_to_bits(const char *filename) {
return arr;
}
// Transformer un tableau de bits (0/1) en fichier binaire
int bits_to_file(const char *filename, const bit_array *arr) {
if (!arr || !arr->bits) return -1;
@ -59,19 +50,17 @@ int bits_to_file(const char *filename, const bit_array *arr) {
uint8_t *raw = (uint8_t*)calloc(nb_bytes, 1);
if (!raw) return -1;
// MSB-first packing: index bit 0 -> place at position 7 of first byte
for (size_t i = 0; i < arr->nb_bits; i++) {
if (arr->bits[i]) {
raw[i / 8] |= (1u << (i % 8));
size_t byte_idx = i / 8;
int bit_in_byte = i % 8; // 0..7
raw[byte_idx] |= (1u << (7 - bit_in_byte));
}
}
FILE *f = fopen(filename, "wb");
if (!f) {
perror("fopen");
free(raw);
return -1;
}
if (!f) { perror("fopen"); free(raw); return -1; }
fwrite(raw, 1, nb_bytes, f);
fclose(f);
free(raw);

View File

@ -19,3 +19,4 @@ char* make_output_filename(const char *input_filename);
// Libérer la mémoire du bit_array
void free_bit_array(bit_array *arr);