在 javascript 中将 uint8array 转换为 double
Convert uint8array to double in javascript
我有一个数组缓冲区,我想从 [64, -124, 12, 0, 0, 0, 0, 0] 得到双 values.For 例子,我会得到 641.5
有什么想法吗?
您可以为给定的字节改编出色的 of T.J. Crowder and use DataView#setUint8
。
var data = [64, -124, 12, 0, 0, 0, 0, 0];
// Create a buffer
var buf = new ArrayBuffer(8);
// Create a data view of it
var view = new DataView(buf);
// set bytes
data.forEach(function (b, i) {
view.setUint8(i, b);
});
// Read the bits as a float/native 64-bit double
var num = view.getFloat64(0);
// Done
console.log(num);
对于多个号码,您可以取 8 个号码。
function getFloat(array) {
var view = new DataView(new ArrayBuffer(8));
array.forEach(function (b, i) {
view.setUint8(i, b);
});
return view.getFloat64(0);
}
var data = [64, -124, 12, 0, 0, 0, 0, 0, 64, -124, 12, 0, 0, 0, 0, 0],
i = 0,
result = [];
while (i < data.length) {
result.push(getFloat(data.slice(i, i + 8)));
i += 8;
}
console.log(result);
根据 Nina Scholz 的回答,我想出了一个更短的:
function getFloat(data /* Uint8Array */) {
return new DataView(data.buffer).getFloat64(0);
}
或者如果你有一个大数组并且知道偏移量:
function getFloat(data, offset = 0) {
return new DataView(data.buffer, offset, 8).getFloat64(0);
}
我有一个数组缓冲区,我想从 [64, -124, 12, 0, 0, 0, 0, 0] 得到双 values.For 例子,我会得到 641.5
有什么想法吗?
您可以为给定的字节改编出色的DataView#setUint8
。
var data = [64, -124, 12, 0, 0, 0, 0, 0];
// Create a buffer
var buf = new ArrayBuffer(8);
// Create a data view of it
var view = new DataView(buf);
// set bytes
data.forEach(function (b, i) {
view.setUint8(i, b);
});
// Read the bits as a float/native 64-bit double
var num = view.getFloat64(0);
// Done
console.log(num);
对于多个号码,您可以取 8 个号码。
function getFloat(array) {
var view = new DataView(new ArrayBuffer(8));
array.forEach(function (b, i) {
view.setUint8(i, b);
});
return view.getFloat64(0);
}
var data = [64, -124, 12, 0, 0, 0, 0, 0, 64, -124, 12, 0, 0, 0, 0, 0],
i = 0,
result = [];
while (i < data.length) {
result.push(getFloat(data.slice(i, i + 8)));
i += 8;
}
console.log(result);
根据 Nina Scholz 的回答,我想出了一个更短的:
function getFloat(data /* Uint8Array */) {
return new DataView(data.buffer).getFloat64(0);
}
或者如果你有一个大数组并且知道偏移量:
function getFloat(data, offset = 0) {
return new DataView(data.buffer, offset, 8).getFloat64(0);
}