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

我想解析一个“以有符号的 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


互换的青春
浏览 215回答 2
2回答

江户川乱折腾

您可以从自定义对象创建原型。像这样: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

holdtom

您可以将值左移,使其符号位与 JavaScript 的 32 位有符号整数对齐:let data = 0x8000;&nbsp; // = parseInt('8000', 16);data << 16&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // -2147483648然后除以高字节表示 0-255:(data << 16) / (1 << 24)&nbsp; // -128
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript