为了账号安全,请及时绑定邮箱和手机立即绑定

如何解析由有符号 8.8 定点表示法表示的十六进制值?(JavaScript)

如何解析由有符号 8.8 定点表示法表示的十六进制值?(JavaScript)

互换的青春 2021-09-17 13:42:13
我想解析一个“以有符号的 8.8 定点符号表示”的两字节值。让我们假设我有下面的十六进制格式的两个字节。let data = '1800';的0x1800十六进制8.8定点表示法应该是24转换时。另一个例子:0x8000在十六进制有符号 8.8 定点符号转换时应该是 -128。更多细节我特别尝试从 Eddystone 遥测框架中解析温度,该框架在此处定义:https : //github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md#field-notes
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您可以从自定义对象创建原型。像这样:


function FixedPoint(fraction){

  this.fraction = fraction;

}


FixedPoint.prototype.calculate = function(value){

  let intValue = parseInt(value, 16);

  let signed = (intValue & 0x8000) > 0 ? -1 : 1;

  return signed * intValue / Math.pow(2, this.fraction);

}

如何使用它?


let example = new FixedPoint(8);

example.calculate('1840');

返回 24.25


查看完整回答
反对 回复 2021-09-17
?
holdtom

TA贡献1805条经验 获得超10个赞

您可以将值左移,使其符号位与 JavaScript 的 32 位有符号整数对齐:


let data = 0x8000;  // = parseInt('8000', 16);

data << 16          // -2147483648

然后除以高字节表示 0-255:


(data << 16) / (1 << 24)  // -128


查看完整回答
反对 回复 2021-09-17
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信