2016-10-03 121 views
0

我读数据视图的this explanation而且也有一个例子:如何设置字节序适用于数据视图

var littleEndian = (function() { 
    var buffer = new ArrayBuffer(2); 
    new DataView(buffer).setInt16(0, 256, true /* littleEndian */); 
    // Int16Array uses the platform's endianness. 
    return new Int16Array(buffer)[0] === 256; 
})(); 

我真的不明白这是什么线做:

new DataView(buffer).setInt16(0, 256, true /* littleEndian */); 

这是否意味着存储在范围[0;256]位中的数据应该存储在littleEndian中?

+0

我想你想看看['setInt16'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt16)的文档,它告诉你函数的参数是什么。 –

+0

@MikeMcCaughan,我不想对论据感兴趣。请参阅[我的回答](http://stackoverflow.com/a/39846586/2545680)。 –

回答

0

假设我们创建一个这样的数组缓冲区和数组:

var dv = new DataView(new ArrayBuffer(4)); 

这意味着我们已经有了在内存32位:

0000 0000 0000 0000 0000 0000 0000 0000 

现在,我们要存储的数量0x0103 ,它有以下模式:

0000 0001 0000 0011 

现在,让我们将这个数字存储在前两个字节中小的字节顺序,在后面的两个字节中使用大的字节顺序,看看它是如何在内存中进行布局的。所以:现在

dv.setInt16(0, 0x0103, true); 
dv.setInt16(2, 0x0103, false); 

,在DataView位有这样的模式:

0000 0011 0000 0001 0000 0001 0000 0011 

这里是代码来测试该行为:

var little = dv.getUint16(0); 
little === 0x0103 // false 
little === 0x0301 // true 

var big = dv.getUint16(2); 
big === 0x0103 // true 
big === 0x0301 // false 
相关问题