javascript - Uint16Array 访问 byteOffset 1、3、5 等

标签 javascript firefox opera typed-arrays

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/

相关文章:

javascript - 如何确认选中的单选按钮?

javascript - 如何在受 javascript 滚动和高度范围限制的滚动时按比例减小元素高度?

javascript - TypeError : asm. js类型错误:被调试器禁用

css - Opera 中的文本装饰不适用于 &lt;input type ="button">

javascript - Opera 8.5 中未定义 JSON (json2.js) 变量

javascript - HTML5 onclick 按钮不起作用

javascript - 使用 jQuery 保存多次点击而不是 1 次

google-chrome - 为 Firefox 使用 lesscss 和浏览器 hack

css - -webkit 剪辑路径 :inset equivalent in Firefox

html - Opera Top 位置渲染问题