我想解析一个“以有符号的 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
holdtom
TA贡献1805条经验 获得超10个赞
您可以将值左移,使其符号位与 JavaScript 的 32 位有符号整数对齐:
let data = 0x8000; // = parseInt('8000', 16);
data << 16 // -2147483648
然后除以高字节表示 0-255:
(data << 16) / (1 << 24) // -128
添加回答
举报
0/150
提交
取消