Проблема здесь проистекает из того факта, что показанный список битов в этих спецификациях вовсе не предназначен для размещения числа под ним. Он предназначен для размещения списка битов под ним, и этот список переходит от младшего бита к старшему биту , который полностью противоположен тому, как мы читаем числа слева направо.
В списке четко показаны биты с номерами от 0 до 31, однако это означает, что это действительно одно 32-битное значение, а не четыре байта. В частности, это означает, что оригинальные байты чтения должны быть интерпретированы как одно 32-разрядное целое число , прежде чем делать что-либо еще. Как и для всех других значений, это означает, что его нужно читать как порядковый номер с обратными байтами.
Таким образом, ваш 9b 00 08 00
становится 0008009b
, или, в двоичном виде, 0000 0000 0000 1000 0000 0000 1001 1011
.
Но, как я уже сказал, этот список в спецификациях показывает биты от младшего к старшему. Чтобы соответствовать им, измените двоичную версию:
0 1 2 3
0123 4567 8901 2345 6789 0123 4567 8901
ABCD EFGH IJKL MNOP QRST UVWX YZ@_ ____
---------------------------------------
1101 1001 0000 0000 0001 0000 0000 0000
^
Таким образом, бит 6, обозначенный в спецификации как 'G', равен 0.
Все это делает намного больше имеет смысл, если вы инвертируете спецификации, и логически перечисляете биты от старшего к низшему:
3 2 1 0
1098 7654 3210 9876 5432 1098 7654 3210
____ _@ZY XWVU TSRQ PONM LKJI HGFE DCBA
---------------------------------------
0000 0000 0000 1000 0000 0000 1001 1011
^
0 0 0 8 0 0 9 b
Это делает ссылки на алфавит c выглядят намного менее интуитивно понятными, но они идеально вписываются в цифры. c версии под. Этот бит соответствует вашим выводам (третий бит того, что у вас в качестве значения «9»), и вы также можете ясно видеть, что старшие 5 бит не используются.