|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
21.01.2007, 01:47
|
#1
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Запаковка флагов в один байт.
Все что будет здесь написанно в основном касается программирования сетевых игр.
Иногда надо передать информацию весьма сжато, особенно если эта информация типа boolean (0/1). Ну например мочить своих/нет, использовать мины/нет и т.д.
вот пример как ету инфу запокавать в один байт. потом его можно chr командой привести к одной букве и отпрваить ее по сети, радуясь экономии трафика.
b=PackFlagsToByte(1,1,1,0,0,1,1,0)
For i=0 To 7
Write(ub(b,i))
Next
WaitKey
Function PackFlagsToByte%(f0,f1,f2,f3,f4,f5,f6,f7)
If f0<0 Then f0=0
If f0>1 Then f0=1
If f1<0 Then f1=0
If f1>1 Then f1=1
If f2<0 Then f2=0
If f2>1 Then f2=1
If f3<0 Then f3=0
If f3>1 Then f3=1
If f4<0 Then f4=0
If f4>1 Then f4=1
If f5<0 Then f5=0
If f5>1 Then f5=1
If f6<0 Then f6=0
If f6>1 Then f6=1
If f7<0 Then f7=0
If f7>1 Then f7=1
rb%=0
rb=f0 Shl 7+f1 Shl 6+f2 Shl 5+f3 Shl 4+f4 Shl 3+f5 Shl 2+f6 Shl 1+f7
Return rb
End Function
Function ub%(b_%,bit)
bit=7-bit
Return (b_ Shr bit) Mod 2
End Function
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
21.01.2007, 11:57
|
#2
|
|
Re: Запаковка флагов в один байт.
1) как я помню блиц держит параметры функции по дефолту
потому лутче бы в функции PackFlagsToByte
все параметры кроме первого по дефолту поставить 0
вдруг юзеру захочется не 8 флагов записать, а 3 или 5 ?
2) имхо в той функции не нужны проверки
пусть если юзер намудачит то прога крешит
а то потом будет читать ети флаги - ему вместо 3 возвращает 1
и он будет думать долго ...
|
|
|
Эти 3 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
22.01.2007, 02:42
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Запаковка флагов в один байт.
Jimon, хорошие идеи
Function PackFlagsToByte%(f0,f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0).
rb=f0 Shl 7+f1 Shl 6+f2 Shl 5+f3 Shl 4+f4 Shl 3+f5 Shl 2+f6 Shl 1+f7
Return rb
End Function
|
(Offline)
|
|
Эти 6 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
11.12.2008, 12:23
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Запаковка флагов в один байт.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:19.
|