_shl: function (a, b){
for (++b; --b; a = ((a %= 0x7fffffff + 1) & 0x40000000) == 0x40000000 ? a * 2 : (a - 0x40000000) * 2 + 0x7fffffff + 1);
return a;
},
_readByte: function (i, size) {
return this._buffer.charCodeAt(this._pos + size - i - 1) & 0xff;
},
_readBits: function (start, length, size) {
var offsetLeft = (start + length) % 8;
var offsetRight = start % 8;
var curByte = size - (start >> 3) - 1;
var lastByte = size + (-(start + length) >> 3);
var diff = curByte - lastByte;
var sum = (this._readByte(curByte, size) >> offsetRight) & ((1 << (diff ? 8 - offsetRight : length)) - 1);
if (diff && offsetLeft) {
sum += (this._readByte(lastByte++, size) & ((1 << offsetLeft) - 1)) << (diff-- << 3) - offsetRight;
}
while (diff) {
sum += this._shl(this._readByte(lastByte++, size), (diff-- << 3) - offsetRight);
}
return sum;
},
此代碼的二進制文件的閱讀。不幸的是,這個代碼沒有記錄。 我想了解它是如何工作的。 (特別是_readBits和_shl方法) 在_readBits什麼是offign的?也curByte和lastByte: 我認爲這樣的方式:
_readBits(0,16,2)curByte成爲1. lastByte成爲0.爲什麼lastByte小於curByte?或者我犯了一個錯誤?哪裏?請幫忙!
@ Bakudan-ханювиги這並不奇怪,注意'++ b'只執行一次。 – ExpExc
我更喜歡binaryAjax.js - http://www.nihilogic.dk/labs/binaryajax/binaryajax.js - 你可以在它的網站上找到一些幫助。 – Luc125