首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将两个16位整数(高字/低字)转换为32位浮点数?

如何将两个16位整数(高字/低字)转换为32位浮点数?
EN

Stack Overflow用户
提问于 2016-12-05 09:15:42
回答 1查看 5.2K关注 0票数 2

我有两个16位整数的原始数据。

例如:

高字= 17142 (12)或0100001011110110 (二进制)

低字= 59759 (12)或1110100101111001 (二进制)

如果将两个字放在一起作为一个32位浮动数据,它将是"123.456“。

二进制->01000010111101101110101011110011001

如何将整数数组59759,17142转换为Javascript中的浮点数123.456?

注:X (16位低字),Y(16位高字) ==> Z(32位浮点数)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 09:22:24

您可以使用类型化数组ArrayBuffer来实现这一点,这允许您以不同的方式解释相同的位(但endianness是特定于平台的)。在缓冲区上使用DataView也是可能的,它允许您控制endianness。

下面是类型化数组方法,它与我的平台的特性一起工作,请参见注释:

代码语言:javascript
运行
复制
// 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方法,注意按相反的顺序写入ints:

代码语言:javascript
运行
复制
// 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);

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40970739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档