https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt8
当这篇文章说:
时,我想在这里澄清一些事情setInt8()方法在距DataView开头的指定字节偏移处存储带符号的8位整数(字节)值。<<
然后执行此代码
var buffer = new ArrayBuffer(8);
var dataview = new DataView(buffer);
dataview.setInt8(1, 3);
dataview.setInt8(3, -3);
缓冲区实际上是:
[
00000000,
00000011,
00000000,
10000011,
00000000,
00000000,
00000000,
00000000
]
最高可能是127
?
我想我已经用
证实了这一点dataview.setInt8(1,128);
dataview.getInt8(1); // -127
但是......我很困惑为什么它会回复......
dataview.setInt8(1, 255);
dataview.getInt8(1); // -1
dataview.setInt8(1, 257);
dataview.getInt8(1); // 1
由于dataview.setInt8(1,257)
超出了8位整数的范围,我不应该在256
收到错误吗?我只是想确认缓冲区实际上是上面列出的二进制数组...所以如果将8位整数转换为16位整数,这会有所不同......谢谢!
答案 0 :(得分:0)
如果您尝试这样做:
dataview.setInt8(1,1);
dataview.getInt16(1); // 256
dataview.setInt8(1,257);
dataview.getInt16(1); // 256
你可以确认setInt8只写入缓冲区的一个字节,即使给定的输入值超过8位也是如此。所以你在那里安全。
奇怪的是,.setInt8()
和.setUint8()
似乎是相同的功能(在Chrome上,我尝试过的唯一浏览器)。 .setInt8(1,255)
和.setUint8(1,-1)
都不会返回错误,.setInt8(1,-1)
和.setUint8(1,-1)
会产生相同的效果。
此外,你问过最高可能是127?'。是的,如果您正在使用getInt8()
读取缓冲区。使用getUint8()
或getInt16()
等读取它可能会返回高于127的值。与set函数不同,get函数在签名方面似乎(正确地)表现不同。
从空缓冲区开始,如果执行:
dataview.setInt8(1,3);
dataview.setInt8(3,3);
缓冲区将包含:
00000000 00000011 00000000 11111101
您可以尝试:
来验证这一点dataview.getInt32(0); // 196861 = 110000000011111101
负数通过缓冲区中的Two's Complement表示