new Uint16Array(ArrayBuffer, byteOffset, length);
对于Uint16
(word) byteOffset
只能是0, 2, 4, 6 etc. 如何获取第2、4字节? (byteOffset
= 1、3 等)
DataView
是 Chrome 的解决方案,但不是 FireFox 的解决方案(根本不了解 Opera)。
最佳答案
您可以将缓冲区转换为 Uint8Array
(用于单独的字节),然后从该数组中读取:
var a = new Uint16Array(10);
// fill `a` with data
for(var i = 0; i < 10; i++) a[i] = i * 10;
var b = new Uint8Array(a.buffer); // `b` contains bytes of `a`, e.g. use `b[1]`
var orig = new Uint8Array(buffer);
var sub = new Uint16Array(orig.subarray(1, 2)); // from index 1 to 2, so second byte
var word = sub[0]; // 2nd byte as Uint16
关于您发布的案例:
var buf = new ArrayBuffer(65535);
var u8s = new Uint8Array(buf);
u8s[0] = 0x01;
u8s[1] = 0x02;
u8s[2] = 0x03;
var x = new Uint8Array(u8s.subarray(1, 3)).buffer; // buffer from subarray
// 1 to 3 because 1 word is 2 bytes
sub = new Uint16Array(x); // create Uint16Array from it
sub[0]; // 770, which is: (3 << 8) | 2 (it is big-endian)
关于javascript - Uint16Array 访问 byteOffset 1、3、5 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455757/