如何将四个十六进制数更改为在js中浮动?

时间:2015-10-24 11:43:56

标签: javascript floating-point

像这样:

我有一个浮点数25.56,我可以把它翻译成js中的四个十六进制数E1 7A CC 41。翻译方式在C中称为union。

但我不知道如何将E1 7A CC 41更改为js中的浮动

1 个答案:

答案 0 :(得分:0)

您必须使用typed arraysarray buffers

Array.from(
  new Uint8ClampedArray(       // Represents the four bytes…
    new Float32Array([25.56])  // …of this number
      .buffer
  )
).map(function(a){
  return a.toString(16);
});

这将返回数组[ "e1", "7a", "cc", "41" ]

另一种方式也适用:

new Float32Array(
  new Uint8ClampedArray(
    ["e1", "7a", "cc", "41"].map(function(a){
      return parseInt(a, 16);
    })
  ).buffer
);

注意:这不会返回Float32Aray 25.56,而是25.559999465942383,因为这是32位浮点数的全部精度数。使用Float64Array,您将获得十六进制数组["8f", "c2", "f5", "28", "5c", "8f", "39", "40"],然后准确地返回数字25.56

仅自Firefox 4,Chrome 7和Internet Explorer 10支持这些API。

构造函数Uint8ClampedArrayFloat32Array可以获取长度作为参数,数组或ArrayBuffer

当他们获得一个数组时,会从该数组创建一个新的类型数组。

当他们得到ArrayBuffer时,会根据缓冲区所属的类型化数组的内容和类型创建一个新的类型数组。