Uint32Array (buffer, byteOffset, length) не работает должным образом - PullRequest
8 голосов
/ 07 декабря 2011

Согласно MSDN Я могу создать Uint32Array тремя способами:

  1. new Uint32Array( length );
  2. new Uint32Array( array );
  3. new Uint32Array( buffer, byteOffset, length );

Первый и второй метод прекрасно работают, но третий не работает для меня. Что не так в этом коде?

var buffer = new ArrayBuffer(8);
var uint32s = new Uint32Array(buffer, 4, 4);
uint32s[0] = 0x05050505;
var uint8s = new Uint8Array(buffer);
for (var i =0; i< 8; i++)
{
    alert(uint8s[i]);
}

Это отлично работает, но, конечно, byteOffset = 0.

var uint32s = new Uint32Array(buffer);

1 Ответ

6 голосов
/ 07 декабря 2011

Кажется, что документация здесь неверна, поскольку length - это не количество байтов, а число 32-разрядных целых чисел, которые будет содержать Uint32Array.

Приложение A

Изменение кода на var uint32s = new Uint32Array(buffer, 4, 1); работает.

Приложение B

Документация для Uint32Array для MDN говоритlength - это число элементов, а не байтов.

Приложение C

Не имеет смысла заставлять конструктор принимать длину в байт .Что должно произойти, если length не кратно 4?

...