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;
}