2014-10-07 34 views
3

我正在解析一個帶有DataView的序列化對象,並希望能夠根據數據大小增加一個偏移量變量。我寧願不重新定義變量簡單的事情,像BYTES_PER_UINT16如何獲取DataView類型的大小(例如,Uint32 = 4,Float64 = 8)以提高偏移量?

... 
var dv = new DataView(payload); 
var offset = 0; 
anObject.field1 = dv.getUint8(offset); 
offset += BYTES_PER_UINT8; 
anObject.field2 = dv.getUint32(offset, true); 
offset += BYTES_PER_UINT32; 
... 

回答

0

你需要用他們的對象,它可以實現這個要求。

例如:

function DataViewExt(o) { 
    this.view = new DataView(o); 
    this.pos = 0; 
} 

DataViewExt.prototype = { 
    getUint8: function() { 
     return this.view.getUint8(this.pos++); 
    }, 

    getUint16: function() { 
     var v = this.view.getUint16(this.pos); 
     this.pos += 2; 
     return v 
    }, 
    // etc... 
}; 

現在,您可以創建一個實例:

var dv = new DataViewExt(payload); 
var uint8 = dv.getUint8();  // advances 1 byte 
var uint16 = dv.getUint16();  // advances 2 bytes 
... 
console.log("Current position:", dv.pos); 

修改以適合您的方案。

相關問題