internal static int ParseLength(byte[] mb, ref int offset)
{
if( offset == mb.Length )
throw new OverflowException("Buffer is too short.");
int dataLen = 0;
if ((mb[offset] & HIGH_BIT) == 0)
{
// short form encoding
dataLen = mb[offset++];
return dataLen; // we are done
}
else
{
dataLen = mb[offset++] & ~HIGH_BIT; // store byte length of the encoded length value
int value = 0;
for (int i = 0; i < dataLen; i++)
{
value <<= 8;
value |= mb[offset++];
if( offset > mb.Length || (i < (dataLen-1) && offset == mb.Length ) )
throw new OverflowException("Buffer is too short.");
}
return value;
}
}