Конкретными вариантами, если это имеет значение, являются Minecraft VarInts / VarLongs :
Формат переменной длины, так что меньшие числа используют меньше байтов. Они очень похожи на вариации протокола: 7 младших битов используются для кодирования значения, а старший бит указывает, есть ли после него еще один байт для следующей части числа. Сначала пишется наименее значимая группа, за которой следует каждая из наиболее значимых групп; таким образом, VarInts фактически являются прямым порядком байтов (однако группы составляют 7 битов, а не 8).
Как я могу взять число и выяснить, сколько байтов займет представление VarInt?
Например, для значения 0b10000000_00000000
результат должен быть равен 3, поскольку представление varint:
Byte 1 Byte 2 Byte 3 <-- the result
======== ======== ========
1234567* 89ABCDE* FGHIJKL*
-------- -------- --------
00000001 00000001 01000000
^ ^ ^
continue bit continue bit continue bit off, no more.
Я могу просто преобразовать в varint и проверить, но я уверен, что есть более быстрый путь.