English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
Re: [Caml-list] Using 16 bits integers
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2001-07-04 (02:21)
From: Arturo Borquez <aborquez@a...>
Subject: Re: [Caml-list] Using 16 bits integers
On Tue, 03 July 2001, jarvarvar@airtel.net wrote:

> Hello, I'm just new to OCaml. I'm writing a program wich uses a lot of
> 16 bits operations, and writes them to a buffer. For writing into the
> buffer, it is needed for the data to be in 16 bits, not in 32 bits.
> Exactly, the program is like a sound synthesizer, so data cannot be send
> to sound card in 32 bits.
> My problem with OCaml is: how can I manage 16 bits data, and make
> operations with it? I had not seen any type in Ocaml with 16bits lenght
> (int is 32 bits in my machine). This will frustate my project if I do
> not find a solution, so I will use C if there is no other solution...
> but I would not like to do if I can avoid it, because I like very much
> Ocaml.
> I'm hopping your answers. Thanks.
Very simple. Do all your programm computations in
OCaml native ints (32 or 64 bit CPU) and when put
these ints into the buffer then 'convert' them to
16 bits.


let put_int16_into_buffer buffer position int_value =
  buffer.[pos] <- char_of_int (int_value land 0xff);
  buffer.[pos + 1] <- char_of_int (int_value lsr 8)

You must verify endianness of your CPU to fetch LH or
HL. The example shows the case of little-endian used
in all Intel CPU's. In a similar way you can retrieve
ints from a buffer

let get_int16_to_int_from_buffer buffer position =
  let int_value = (int_of_char buffer.[position] +
    ((int_of_char buffer.[position + 1]) * 256) in

Best Regards
Arturo Borquez 

Find the best deals on the web at AltaVista Shopping!
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr