Показать сообщение отдельно
Старый 29.03.2012, 10:08   #4
Платон Александрович
Нуждающийся
 
Аватар для Платон Александрович
 
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений
(для 83 пользователей)
Ответ: Подскажите,как выделить байты из 4х байтового числа?

Сообщение от executer Посмотреть сообщение
Подскажите пожалуйста,как выделить байты из 4х байтового числа?
Сдвигай число на нужное кол-во бит вправо (суть - обрезать число справа), потом маской обрезаешь число слева:
(считаем справа налево)
1 байт - Number And $FF
2 байт - ( Number Shr 8 ) And $FF
3 байт - ( Number Shr 16 ) And $FF
4 байт - Number Shr 24

т.е. было $12 34 56 78

применил маску $FF - выделил $78

сдвинул число вправо на 8 бит, т.е. на байт, получил $00 12 34 56
потом применил маску $FF - выделил $56
и т.д.

справедлива и обратная операция, т.е.
есть у тебя 4 байта
$12
$34
$56
$78
сдвигаешь каждый байт влево, через другие байты, т.е.
$12 Shl 24 - на четвертое место
$34 Shl 16 - на третье место
$56 Shl 8 - на второе место
$78 - остается на первом месте
и складываешь их все операцией Or:
Number = ($12 Shl 24) Or ($34 Shl 16) Or ($56 Shl 8) Or $78

ЗЫ
Так-же не стоит забывать что существует два порядка следования байтов в числе - little-endian и big-endian, т.е. справа налево и наоборот. Но с этим не заморачивайся, если числа везде сам упаковываешь\распаковываешь, а вот для взаимодействия с другими программами (или библиотеками) стоит поинтересоваться.

Последний раз редактировалось Платон Александрович, 29.03.2012 в 12:22.
(Offline)
 
Ответить с цитированием