readPackedInt method

int readPackedInt()

Считывает запакованное целое число

Специальная упаковка числа

Первые биты показывают в скольки байтах записано число

  • от 0 до 0x7F - 1 байт (первые биты = 0xxxxxxx)
  • от 0x80 до 0x3FFF - 2 байта (первые биты = 10xxxxxx)
  • от 0x4000 до 0x1FFFFF - 3 байта (первые биты = 110xxxxx)
  • от 0x200000 до 0x0FFFFFFF - 4 байта (первые биты = 1110xxxx)
  • от 0x10000000 до 0x07FFFFFFFF - 5 байт (первые биты = 11110xxx)
  • от 0x0800000000 до 0x03FFFFFFFFFF - 6 байт (первые биты = 111110xx)
  • от 0x040000000000 до 0x01FFFFFFFFFFFF - 7 байт (первые биты = 1111110x)
  • от 0x02000000000000 до 0x00FFFFFFFFFFFFFF - 8 байт (первые байт = 0xFE)
  • от 0x0100000000000000 до 0xFFFFFFFFFFFFFFFF - 9 байт (первые байт = 0xFF)

Implementation

@pragma('vm:prefer-inline')
@pragma('dart2js:tryInline')
int readPackedInt() {
  final i = readSize();
  if (i & 1 == 1) {
    return (i >>> 1) ^ 0xffffffffffffffff;
  }
  return i >>> 1;
}