decodeLength static method

Tuple<int, BigInt> decodeLength(
  1. List<int> bytes, {
  2. bool sign = false,
  3. int offset = 0,
})

Implementation

static Tuple<int, BigInt> decodeLength(List<int> bytes,
    {bool sign = false, int offset = 0}) {
  final byte = bytes[offset];

  switch (byte & 0x03) {
    case 0x00:
      return Tuple(1, BigInt.from(byte) >> 2);
    case 0x01:
      final val = BigintUtils.fromBytes(bytes.sublist(offset, offset + 2),
          sign: sign, byteOrder: Endian.little);
      return Tuple(2, val >> 2);
    case 0x02:
      final val = BigintUtils.fromBytes(bytes.sublist(offset, offset + 4),
          sign: sign, byteOrder: Endian.little);
      return Tuple(4, val >> 2);
    default:
      final int o = (byte >> 2) + 5;
      final val = BigintUtils.fromBytes(bytes.sublist(offset + 1, offset + o),
          sign: sign, byteOrder: Endian.little);
      return Tuple(o, val);
  }
}