加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

将两个Uint32Array值转换为Javascript编号

发布时间:2020-12-14 04:38:36 所属栏目:Windows 来源:网络整理
导读:我找到了一个来自 here的代码,它将Javascript编号转换为内部IEEE表示形式,作为两个Uint32值: function DoubleToIEEE(f){ var buf = new ArrayBuffer(8); (new Float64Array(buf))[0] = f; return [ (new Uint32Array(buf))[0],(new Uint32Array(buf))[1] ];
我找到了一个来自 here的代码,它将Javascript编号转换为内部IEEE表示形式,作为两个Uint32值:

function DoubleToIEEE(f)
{
  var buf = new ArrayBuffer(8);
  (new Float64Array(buf))[0] = f;
  return [ (new Uint32Array(buf))[0],(new Uint32Array(buf))[1] ];
}

如何将返回值转换回Javascript号?这条路:

var number = -10.3245535;
var ieee = DoubleToIEEE(number)
var number_again = IEEEtoDouble(ieee);
// number and number_again should be the same (if ever possible)

解决方法

那段代码很丑陋.使用

function DoubleToIEEE(f) {
  var buf = new ArrayBuffer(8);
  var float = new Float64Array(buf);
  var uint = new Uint32Array(buf);
  float[0] = f;
  return uint;
}

如果您想要一个实际的Array而不是Uint32Array(在大多数情况下不应该有所区别),请添加一个Array.from调用.您还可以通过将值传递给Float64Array构造函数将其减少为oneliner:

function DoubleToIEEE(f) {
  // use either
  return new Uint32Array(Float64Array.of(f).buffer);
  return Array.from(new Uint32Array(Float64Array.of(f).buffer));
  return Array.from(new Uint32Array((new Float64Array([f])).buffer));
}

逆将只是将输入写入uint槽并返回float [0]值:

function IEEEToDouble(is) {
  var buf = new ArrayBuffer(8);
  var float = new Float64Array(buf);
  var uint = new Uint32Array(buf);
  uint[0] = is[0];
  uint[1] = is[1];
  return float[0];
}

这可以缩短为

function IEEEToDouble(is) {
  return (new Float64Array(Uint32Array.from(is).buffer))[0];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读