Каждая шестнадцатеричная цифра представляет четыре двоичных разряда. Поэтому ваше смещение в 36 бит (что, кстати, 0x24, а не 0x23) эквивалентно 9 шестнадцатеричным цифрам. Так что отбросьте самые правые 9 цифр от вашего исходного номера, оставив вас с 0000C1F
.
Тогда длина нужного вам номера составляет 12 бит, что составляет 3 шестнадцатеричных цифры. Поэтому отбросьте все, кроме самых правых трех цифр, оставив в качестве ответа C1F
.
Если бы число бит не было кратным 4, то вам пришлось бы преобразовать исходное шестнадцатеричное число в двоичное, затем отбросьте offset
количество бит справа, сохраните только самые правые length
биты из результата и, наконец, преобразуйте эти length
биты обратно в шестнадцатеричное.