如何解析由带符号的 8.8 定点符号表示的十六进制值? (JavaScript)
How to parse a hex value that is represented by signed 8.8 fixed-point notation? (JavaScript)
我想解析一个 "expressed in a signed 8.8 fixed-point notation" 的两字节值。假设我有下面十六进制格式的两个字节。
let data = '1800';
十六进制8.8定点数的0x1800
转换后应为24
另一个例子:0x8000
十六进制有符号8.8定点数转换后应该是-128。
更多详情
我专门尝试从此处定义的 Eddystone 遥测帧解析温度:https://github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md#field-notes
您可以从自定义对象创建原型。像这样:
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');
returns 24.25
的更多信息
您可以将值左移,使其符号位与 JavaScript 的 32 位有符号整数对齐:
let data = 0x8000; // = parseInt('8000', 16);
data << 16 // -2147483648
然后除以高字节代表0-255:
(data << 16) / (1 << 24) // -128
我想解析一个 "expressed in a signed 8.8 fixed-point notation" 的两字节值。假设我有下面十六进制格式的两个字节。
let data = '1800';
十六进制8.8定点数的0x1800
转换后应为24
另一个例子:0x8000
十六进制有符号8.8定点数转换后应该是-128。
更多详情
我专门尝试从此处定义的 Eddystone 遥测帧解析温度:https://github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md#field-notes
您可以从自定义对象创建原型。像这样:
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');
returns 24.25
的更多信息您可以将值左移,使其符号位与 JavaScript 的 32 位有符号整数对齐:
let data = 0x8000; // = parseInt('8000', 16);
data << 16 // -2147483648
然后除以高字节代表0-255:
(data << 16) / (1 << 24) // -128