作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 16 位整数原始数据。
例如:
高位字 = 17142(十进制)或 0100001011110110(二进制)
低位字 = 59759(十进制)或 1110100101111001(二进制)
如果把两个word一起看成一个32bit的float数据,就是"123.456"
二进制 --> 01000010111101101110100101111001
如何在 Javascript 中将整数数组 [59759 , 17142] 转换为 float 123.456?
注意:[ X (16bit low word) , Y (16 bit high word) ] ==> Z (32bit float)
最佳答案
您可以使用 typed arrays 执行此操作和 ArrayBuffer
,它允许您以不同的方式解释相同的位(但字节序是特定于平台的)。也可以使用 DataView
在缓冲区上,它可以让您控制字节顺序。
这是与我平台的字节序一起工作的类型化数组方法,请参阅评论:
// Create a buffer
var buf = new ArrayBuffer(4);
// Create a 16-bit int view of it
var ints = new Uint16Array(buf);
// Fill in the values
ints[0] = 59759;
ints[1] = 17142;
// Create a 32-bit float view of it
var floats = new Float32Array(buf);
// Read the bits as a float; note that by doing this, we're implicitly
// converting it from a 32-bit float into JavaScript's native 64-bit double
var num = floats[0];
// Done
console.log(num);
这是 DataView
方法,请注意以相反的顺序写入整数:
// Create a buffer
var buf = new ArrayBuffer(4);
// Create a data view of it
var view = new DataView(buf);
// Write the ints to it
view.setUint16(0, 17142);
view.setUint16(2, 59759);
// Read the bits as a float; note that by doing this, we're implicitly
// converting it from a 32-bit float into JavaScript's native 64-bit double
var num = view.getFloat32(0);
// Done
console.log(num);
关于javascript - 如何将两个16位整数(高位字/低位字)转换为32位 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970739/
我是一名优秀的程序员,十分优秀!