При работе с шестнадцатеричными числами, как использовать битовое смещение и длину, чтобы получить значение? - PullRequest
0 голосов
/ 05 октября 2019

У меня есть следующий номер

0000C1FF61A40000

Смещение или начало 36 или 0x23

Длина номера 12 или 0xc

Может кто-нибудь помочь мне понять, как получить полученное значение? Я думал, что смещение означает, с какой пары шестнадцатеричных чисел начать, а затем длину, сколько будет хватать. Там определенно нет 36 пар, только 8. Не знаю, как бы я сделал длину 12 с только 8.

1 Ответ

0 голосов
/ 06 октября 2019

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

Тогда длина нужного вам номера составляет 12 бит, что составляет 3 шестнадцатеричных цифры. Поэтому отбросьте все, кроме самых правых трех цифр, оставив в качестве ответа C1F.

Если бы число бит не было кратным 4, то вам пришлось бы преобразовать исходное шестнадцатеричное число в двоичное, затем отбросьте offset количество бит справа, сохраните только самые правые length биты из результата и, наконец, преобразуйте эти length биты обратно в шестнадцатеричное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...