2014-10-07 3 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); 

Изменить, чтобы соответствовать вашему сценарию.

 Смежные вопросы

  • Нет связанных вопросов^_^