Javascript example of parsing a TLV (tag-length-value)

function parseTLV (buffer) {

var offset = 0; // current position in buffer

var tlvArray = []; // array of TLV objects

while (offset < buffer.length) {

var tag = buffer[offset++]; // read one byte for tag

if (tag & 0x1F === 0x1F) { // check if tag is multi-byte

do {

tag = (tag << 8) + buffer[offset++]; // read more bytes for tag

} while (tag & 0x80); // until last byte has bit 7 cleared

}

var length = buffer[offset++]; // read one byte for length

if (length & 0x80) { // check if length is multi-byte

var bytes = length & 0x7F; // number of bytes for length

length = 0; // reset length to zero

for (var i = 0; i < bytes; i++) {

length = (length << 8) + buffer[offset++]; // read more bytes for length

}

}

var value = buffer.slice(offset, offset + length); // read value bytes

offset += length; // update position in buffer

tlvArray.push({tag: tag, length: length, value: value}); // add TLV object to array

}

return tlvArray;

}

Reply to this note

Please Login to reply.

Discussion

No replies yet.