Floating point 在OCaml中,如何从字节数组创建浮点?
如何执行类似于此C技巧的操作,从字节数组中获取OCamlFloating 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
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给出了一个更好的答案。如果可能的话,您一定要避免以非犹太方式使用封送
模块。