forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Подскажите,как выделить байты из 4х байтового числа? (http://forum.boolean.name/showthread.php?t=16555)

executer 29.03.2012 09:33

Подскажите,как выделить байты из 4х байтового числа?
 
Подскажите пожалуйста,как выделить байты из 4х байтового числа?
Понимаю что тут маска нужна
Пробовал and-что то видимо не так задаю
на входе результат Print Hex(msg)
например 800С400Е
Нужно как то выделить 1,2,3,4 ,байты

Пробовал что то типа Print Hex(msg)And Hex (FFFFFF)
но результат не тот
Вопрос детский-но сам недопираю где ошибка:)

johnk 29.03.2012 09:43

Ответ: Подскажите,как выделить байты из 4х байтового числа?
 
http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE% D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8
http://ru.wikipedia.org/wiki/%D0%91%...B2%D0%B8%D0%B3

Разбирайся.

executer 29.03.2012 10:03

Ответ: Подскажите,как выделить байты из 4х байтового числа?
 
Спасибо!
3й байт вроде выделил Print ((msg)Shr 16)-36864
а вот другие что то не получаются

Платон Александрович 29.03.2012 10:08

Ответ: Подскажите,как выделить байты из 4х байтового числа?
 
Цитата:

Сообщение от executer (Сообщение 223991)
Подскажите пожалуйста,как выделить байты из 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, т.е. справа налево и наоборот. Но с этим не заморачивайся, если числа везде сам упаковываешь\распаковываешь, а вот для взаимодействия с другими программами (или библиотеками) стоит поинтересоваться.

executer 29.03.2012 10:14

Ответ: Подскажите,как выделить байты из 4х байтового числа?
 
Спасибо-пробую сейчас!
Платон Александрович-вы мне отвечали про запись звука?

Платон Александрович 29.03.2012 10:24

Ответ: Подскажите,как выделить байты из 4х байтового числа?
 

Цитата:

Сообщение от executer (Сообщение 223998)
Платон Александрович-вы мне отвечали про запись звука?

Ага, только давай на ты :)
Я в аське сейчас.


Часовой пояс GMT +4, время: 05:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot