Одна идея заключается в следующем.Предположим, что у вас есть четырехбайтовое значение, подобное этому:
aaaaaaaa bbbbbbbb cccccccc dddddddd
Предположим, что вы хотите получить из этого байт bbbbbbbb
.Если вы сдвинете вправо на два байта, вы получите
???????? ???????? aaaaaaaa bbbbbbbb
Это значение равно тому, что вы хотите, за исключением того, что в верхней части оно имеет ???????? ???????? aaaaaaaa
(потому что мы не уверены, является ли сдвиг знаком-сохранять или нет, так как я не знаю, является ли ваша ценность без знака или нет.) Однако не стоит беспокоиться;мы можем избавиться от этих неизвестных значений и байта a
.Чтобы избавиться от вершины, предположим, что вы сдвигаете вправо еще один байт, давая
???????? ???????? ???????? aaaaaaaa
Теперь сдвиньте влево один байт, чтобы получить
???????? ???????? aaaaaaaa 00000000
Если вы затем выполните это вычитание, выget
???????? ???????? aaaaaaaa bbbbbbbb
- ???????? ???????? aaaaaaaa 00000000
---------------------------------------
00000000 00000000 00000000 bbbbbbbb
И вуаля ... вы получили желаемое значение!
Я оставлю реальный код в качестве упражнения для читателя.Не волнуйся;это не особенно сложно.: -)