Module pour écrire en binaire
Bonjour,
Je suis actuellement en train d'apprendre Ocaml. Je souhaiterais compresser des images et pour cela j'ai besoin d'écrire bit à bit. Je me suis lancé dans l'écriture et voilà ce que j'obtiens :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| (* binary writing and reading *)
type binary_buffer = {
file : out_channel;
buffer : char array;
size : int;
mutable byte_index : int;
mutable bit_index : int;
} ;;
let open_binary_file name =
{
file = open_out name;
buffer = Array.make 256 (Char.chr 0);
size = 256;
byte_index = 0;
bit_index = 0;
} ;;
let write_buffer buffer =
for i = 0 to buffer.size do
output_byte buffer.file (int_of_char buffer.buffer.(i))
done ;;
let write_bit buffer bit =
let bits_written = buffer.byte_index * 8 + buffer.bit_index in
let byte_index = buffer.byte_index in
let bit_index = buffer.bit_index in
let current_byte = buffer.buffer.(byte_index) in
begin
if bits_written >= buffer.size then
write_buffer buffer;
if bit <> 0 then
let new_byte = (int_of_char current_byte) lor (1 lsl (7 - bit_index)) in
buffer.buffer.(byte_index) <- (char_of_int new_byte);
if bit_index = 7 then
buffer.byte_index = buffer.byte_index + 1;
buffer.bit_index = (buffer.bit_index + 1) mod 8;
end ;; |
Malheureusement j'obtiens l'erreur suivante dans l'interpréteur :
File "binary.ml", line 37, characters 29-50:
Error: This expression has type int but an expression was expected of type
unit
C'est au niveau de la fonction write_bit. Je comprends le pourquoi de l'erreur mais je ne sais pas comment lui dire d'ignorer le fait que cette affectation puisse être une expression de type int.
Si quelqu'un pouvait m'aider ;-)
De plus, j'ai pensé un petit peu comme si j'écrivais un programme C car ce sont des entrées sorties mais si quelqu'un a une meilleure approche, je suis preneur.
Merci à vous.
--
sperca