On 10/17/06, Jacques Garrigue <garrigue@math.nagoya-u.ac.jp> wrote:
From: Tom <tom.primozic@gmail.com>
> val Pervasives.input_binary_int : in_channel -> int
This will indeed read a 32-bit integer, but on a 32-bit architecture
ocaml int's are 31-bit, so you loose the highest bit.
Note that on a 64-bit architecture this is sufficient for 32-bit
integers!
> val Pervasives.read_int : unit -> int
This one reads a string...
> val Marshal.from_channel : in_channel -> 'a
And this one reads a marshalled value, which must include a special
header indicating its ocaml representation.
So if you really need to read a full 32-bit integer, none of these
will work, and you must do the job by hand.
Jacques Garrigue
Thanks to everybody. I found a library called extlib which provides a module called IO. I solved the problem with
let l =
Int32.float_of_bits (IO.read_real_i32 input)
BTW, I am a bit surprised the standard library does not offer a way to do that. A simple task can become frustrating.
Bye
Maurizio