I am writing a program that encodes data in 32 bit ints.  Ideally I would like to have 32 bit unsigned ints, but OCaml only has 31 bit signed ints.

I have a large binary file with the data that I will mmap with the Bigarray.Array1.map_file function.

When I test the following code I am puzzled by the fact that Ocaml doesn't give me back the int in the same format as I wrote it.

Why doesn't OCaml read back data in the same format?

I need to read the data fast without having to manipulate bits beyond the minimum decoding to get my data back from the binary representation.

Thanks.

let test_data = open_out_bin "test.data" in
  output_binary_int test_data 1

let data =
  let fd = Unix.openfile "test.data" [Unix.O_RDONLY] 0 in
  Bigarray.Array1.map_file fd Bigarray.int Bigarray.c_layout false (-1)