Floating point 在OCaml中,如何从字节数组创建浮点?

Floating point 在OCaml中,如何从字节数组创建浮点?,floating-point,ocaml,Floating Point,Ocaml,如何执行类似于此C技巧的操作,从字节数组中获取OCamlfloat union { double d; int i[2]; } u; u.i[0] = 0; u.i[1] = -20000000; // u.d = -0x1.ed3p+1005 您可能可以使用封送。从\u字节。但是,如果您传递的值不是来自marshall.to_bytes,则无法保证会得到什么。当然,C代码也有类似的问题。含义没有定义(尽管人们还是使用它)。您可以使用标准库中的Int64.float\u of_bit

如何执行类似于此C技巧的操作,从字节数组中获取OCaml
float

union {
  double d;
  int i[2];
} u;

u.i[0] = 0;
u.i[1] = -20000000; // u.d = -0x1.ed3p+1005

您可能可以使用
封送。从\u字节
。但是,如果您传递的值不是来自
marshall.to_bytes
,则无法保证会得到什么。当然,C代码也有类似的问题。含义没有定义(尽管人们还是使用它)。

您可以使用标准库中的
Int64.float\u of_bits
函数:
Int64。浮点的位提供了反向功能


您需要按所需顺序将字节打包到
Int64.t
值中。

能否提供一个最小的代码示例<代码>让b=Bytes.make 4(Char.chr 0)在Marshal.from_Bytes b0失败,出现
异常:无效的\u参数“封送自\u字节”
。正如您所提到的,这可能无法保证有效,因此我认为@hcarty的解决方案最终是一个更好的选择,即使它不直接使用数组。我本来打算这样做的,但后来我发现@hcarty给出了一个更好的答案。如果可能的话,您一定要避免以非犹太方式使用
封送
模块。