external int16_array_to_string : int array-> string = "ml_int16_array_to_string";;
      
#include <caml/alloc.h>

CAMLprim value ml_int16_array_to_string(value buff) {
  CAMLparam1 (buff);
  CAMLlocal1(result);
  int ifieldsize;
  size = Wosize_val(buff);
  result = alloc_string(size*sizeof(unsigned short));
  unsigned short *tab = (unsigned short*)String_val(result);
  for (i=0;i<size;i++,tab++) {
    field = Int_val(Field(buff,i));
    if (field < 0 || field >= MAX_SHORT) {
      invalid_argument("ml_int16_array_to_string");
    }
    *tab=htons((unsigned short)field);
  }
  CAMLreturn(result);
}
      
let test_int16_array_to_string () =
  let array = [| 1234; 13; 345 |] in
  let buffer = int16_array_to_string array in
  try
    for i=0 to (Array.length array)-1 do
      let value = read_int16_from_string buffer (i*2) in
      if array.(i) != value then
 raise (Failure "test_int16_array_to_string")
    done;
    print_endline "Ok: int16_array_to_string"
  with Failure _ ->
    print_endline "Ko: int16_array_to_string";;

test_int16_array_to_string ();;