javascript - 将 32 位无符号 "Real"数据类型(拆分为两个 16 位有符号字)转换为 javascript

标签 javascript node.js floating-point

我有一个 32 位无符号“真实”值拆分为两个 16 位有符号“字”(0-65535) 值。如何将它们转换为 javascript 数字?

例子: 值 1:18584 值 2:18081 实际值为:20644.3

我正在搜索类似 back2Real(18584, 18081) 的函数,它返回 20644.3。这些值来自 modbus 应用程序 (NodeJS/modbus_stack)。 SPS/modbus 服务器发送一个“真实”值,分为两个字寄存器。

问候, root66

最佳答案

您可以使用新的(差不多)类型化数组功能来简化这一过程。

function uint16ToFloat32(low, high) {
  var buffer = new ArrayBuffer(4);
  var intView = new Uint16Array(buffer);
  var floatView = new Float32Array(buffer);

  intView[0] = low;
  intView[1] = high;
  return floatView[0];
}

function float32ToUint16(value) {
  var buffer = new ArrayBuffer(4);
  var intView = new Uint16Array(buffer);
  var floatView = new Float32Array(buffer);

  floatView[0] = value;
  return [intView[0], intView[1]];
}

console.log("Converted ints to", uint16ToFloat32(18584, 18081));
console.log("Converted float to", float32ToUint16(20644.297));

这是一个成绩单:

$ node floatsplit.js
Converted ints to 20644.296875
Converted float to [ 18584, 18081 ]
$

关于javascript - 将 32 位无符号 "Real"数据类型(拆分为两个 16 位有符号字)转换为 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6887003/

相关文章:

node.js - 无法在strongloop 中启动cronjob

javascript - MySQL 减少 onclick 查询次数 - 异步更新

java - 在 javascript 中访问 android.os.Debug 方法

node.js - 将 Sequelize 与 ES6 Promise 一起使用?

c - STM32将无符号短数组转换为 float 组

.net - .NET 中的大 float (单个)

Python:解析由文本表示的长 double 组非常慢

javascript - MongoDB - Mongoose - 只能调用 Controller 保存方法一次。然后就再也不会保存了

javascript - Uglifier 破坏了我的 js 吗?

node.js - 配置 AdonisJS 监听 HTTPS