Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с байтом и битами [D7, WinXP]


stanislav ©   (2007-09-18 16:55:00) 

Получаю от устройства 1 байт данных, представленный в формате Integer. т.е. значение от 0 до 255, этим значением прибор информирует какие из 8 контактов замкнуты т.е. приняли значение 1.
Мне нужно узнать допустим замкнут ли контакт под номером 5, для этого я преобразовую число в строку вида '11101111', и потом с помощю строковых функций(COPY)  получаю 0 либо 1.
Есть ли проще способ это определить?


Anatoly Podgoretsky   (2007-09-19 11:10:00) [1]

Может стоить использовать тип bit


stanislav   (2007-09-19 11:06:00) [2]

sniknik ©   (19.09.07 11:00) [13]

спасибо прочитал все понял. подошло. (Русский BOL по MSSQL рулит :-).)
Я думал это делается процедурами/функциями, хотел посмотреть и по возможности реализовать на MSSQL, оказалось все проще :-).


sniknik   (2007-09-19 11:00:00) [3]

stanislav ©   (19.09.07 10:06) [11]
ну возможно в данном случае и есть целесообразность... сразу бы объяснил для чего нужно не было бы [8] (а то могло с этого все на треп скатится).

> Спасибо почитаю.
поточнее см. раздел bitwise operators и связанное (по ссылкам внизу).


stanislav   (2007-09-19 10:06:00) [4]

Shirson ©   (18.09.07 17:38) [8]
Данные собирает сервер и пишет в базу, и в задачи сервера входит только записать целое число в базу. А результаты обрабатываются aspx страницей.
Чтобы не выполнять кучу запросов к базе проще битовые операции выполнить силами MSSQL.


stanislav   (2007-09-19 10:06:00) [5]

sniknik ©   (18.09.07 19:48) [9]
Спасибо почитаю.


Anatoly Podgoretsky   (2007-09-18 20:16:00) [6]

> sniknik  (18.09.2007 19:48:09)  [9]

Чего только нет в этом королевстве.
Очень богатое королевство.


sniknik   (2007-09-18 19:48:00) [7]

тем не менее в MSSQL есть битовые операции... целесообразности в их использовании чаще всего нет, а операции есть...

после [3] читать BOL...


Shirson   (2007-09-18 17:38:00) [8]

Вы входящие с прибора на MSSQL хотите обрабатывать? О, мсье понимает толк в извращениях! :)


stanislav   (2007-09-18 17:14:00) [9]

Все, понял. А вот как бы теперь это на MSSQL написать?


stanislav   (2007-09-18 17:05:00) [10]

Спасибо, читаю.


Сергей М.   (2007-09-18 17:02:00) [11]


> Есть ли проще способ это определить?
>


Есть. И не один. И не только проще, но и наглядней и эффективней.

см. множества (sets) в Делфи.


DVM   (2007-09-18 17:01:00) [12]

на пальцах:

procedure TForm1.Button2Click(Sender: TObject);
var
n: integer;
begin
n := 239; //11101111
if (n and 16{10000}) <> 0  then windows.Beep(500,50); // не пищит
n := 255; //11111111
if (n and 16{10000}) <> 0  then windows.Beep(500,50); // пищит!
end;


Германн   (2007-09-18 16:59:00) [13]


> Работа с байтом и битами

http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html


Сергей М.   (2007-09-18 16:58:00) [14]


> D7


> Integer. т.е. значение от 0 до 255


Читаем справку:

Generic integer types for 32-bit implementations of Delphi  
Type Range Format
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit


DVM   (2007-09-18 16:57:00) [15]


> Есть ли проще способ это определить?

AND OR SHL SHR и прочие битовые операции


Наверх

Титульная страница Поиск, карта сайта Написать письмо