axa*_*ire 3 javascript arrays node.js typed-arrays
我一直在尝试研究如何在JavaScript中使用类型数组,但是我还没有点击.我不明白如何正确地读/写"视图".
var a = 23453.342;
Run Code Online (Sandbox Code Playgroud)
现在让我们说我想将它存储在一个Float64Array类型的数组中
view[0] = ??? //how do I copy the bytes that represent variable a into here.
Run Code Online (Sandbox Code Playgroud)
另外,假设我想将内部JavaScript中的整数123456存储为64位浮点数:
var i = 123456;
Run Code Online (Sandbox Code Playgroud)
但我想把它存储好像它真的是一个4字节的整数.
var buff = new ArrayBuffer(4);
var view = new UInt32Array(buff);
view[0] = ???; //how do i determine and write the 4 bytes that would represent the value of i.
Run Code Online (Sandbox Code Playgroud)
然后在这两种情况下,一旦我能够写入数据,我如何在JavaScript中将其读回到局部变量中.
如果你的值小于Typed Array单元而不是将值存储到数组中,例如你有23453.342并使用Float64,那么只需将它放入数组中
var view = new Float64Array(1);
view[0] = 23453.342;
Run Code Online (Sandbox Code Playgroud)
现在,如果您想将数字转换为单个字节,例如32位数字并获得4个字节,则可以使用两个TypedArray视图.将您的值放入较高位数组,并从较低位单元读取字节.
//The argument passed to ArrayBuffer constructor
//is number of Bytes the buffer should be
var buff = new ArrayBuffer(4);
//Since buffer was made for 4 bytes, this view can read/store 1 32bit value
var view = new Uint32Array(buff);
//buffer still has 4 bytes, so this view can read/store 4 8bit values
var view2 = new Uint8Array(buff);
view[0] = 123456;
console.log(view2);Run Code Online (Sandbox Code Playgroud)
如果要手动获取字节,或者无法访问更高单元类型的数组,则可以使用位移和按位AND运算符来获取单个字节
var i = 123456;
var buff = new ArrayBuffer(4);
var view = new Uint32Array(buff);
var view2 = new Uint8Array(buff);
view2[0] = i & 0x000000FF;
view2[1] = (i & 0x0000FF00) >> 8;
view2[2] = (i & 0x00FF0000) >> 16;
view2[3] = (i & 0xFF000000) >> 24;
console.log( view2, view[0] );Run Code Online (Sandbox Code Playgroud)
至于将值取回,在使用两个类型数组的情况下,您只需读取目标单元的数组.在这种情况下,从Uint32Array中读取
var buff = new ArrayBuffer(4);
var view = new Uint32Array(buff);
var view2 = new Uint8Array(buff);
view2[0] = 64, view2[1] = 226, view2[2] = 1, view2[3] = 0;
var i = view[0];
console.log(i);Run Code Online (Sandbox Code Playgroud)
再次,如果你想使用位移方式,你需要从较小的类型数组中移位每个字节,并将它们按位或移位在一起.
var buff = new ArrayBuffer(4);
var view = new Uint8Array(buff);
view[0] = 64, view[1] = 226, view[2] = 1, view[3] = 0;
var i = 0;
i |= view[3] << 24;
i |= view[2] << 16;
i |= view[1] << 8;
i |= view[0];
console.log(i);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |