powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Cardinal to binary
25 сообщений из 25, страница 1 из 1
Cardinal to binary
    #39600411
Ддэкки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте
По RS232 порту принимаю 10 байт.
В Hex формате вижу это как FF FF FF FF FF.

Как мне из этих данных получить то, что хочу, а именно:
Откинуть из 40 разрядов 8 правых и 7 левых (еще один разряд - контрольный)?

Получается все только целиком.
Буфер типа Cardinal.

Спасибо.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600460
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ддэкки,

В Cardinal - никак, это число туда не влезет.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600485
DesWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ддэкки,
Код: pascal
1.
2.
3.
4.
5.
  TPacket=packed record
      B1: byte;
      I: Int64;
      B2: byte;
   end;
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600507
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ддэкки,

10 байт это не 40 разрядов )
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600521
Ддекки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В школе такого не говорили.
В буфере 40 разрядов в двоичном коде, он типа кардинал.
Может поэтому и не получается считать, чтоне все влезло.

Второй вариант - 16 разрядов и вторая посылка тоже 16 разрядов.

Как мне из 16 разрядов выкинуть первый только и три последних?

Спасибо.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600522
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется почитать про битовые операции...
Именно тут помогут AND SHL SHR .
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600525
Ддекки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если посылка 69 00 00 00 00,
То первые две цифры вижу как 1001 0110
Вроде так
Получается 10 * 4 разряда
Спасибо
Но надо откинуть еще по бокам
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600536
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДдэккиПо RS232 порту принимаю 10 байт.

COM-порт отдает данные по одному байту.
В зависимости от настройки передающего компьютера, в байте от 5 до 8 битов.

В любом случае ты принимаешь по одному байту.
Вот и клади каждый байт в то место буфера, куда оно попаде
т
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600538
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДдэккиЗдравствуйте
По RS232 порту принимаю 10 байт.
В Hex формате вижу это как FF FF FF FF FF.
Как уже написали, это не 10 байт, а 5.
Про битовые операции можно почтитать например вот здесь:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=838
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600594
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ддэкки,

И, да, это 5 8-ми битных байт.
авторОткинуть из 40 разрядов 8 правых и 7 левых
Если 'откинуть' - это обнулить, то делай AND с данными. Второй операнд AND'а называется маска, в ней устанавливаешь биты, которые нужно сохранить в 1, те, которые сбросить - в 0. Делаешь AND, получаешь результат. Если тебе, конечно, не подвинуть биты надо. С задачей, в общем, нужно разобраться вначале. Прежде чем её решать. С данными, с результатом. Что было и что нужно что бы стало.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600597
СССпасибо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду смотреть.
Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system
Так туда влезает 5 байт?
И читает она за раз, не знаю как реализована.
То есть по брейку вижу, что число есть в буфере.

Спасибо
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600604
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой для себя инфу
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi)

чтобы не возникало в будущем вопросов, влазит ли 5 байт в Кардинал или нет.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600605
Ддэкки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ссулку посмотрел, понятно...

Ну вот не понял как мне указать в каком из байтов я хочу что-то делать.
Например, переключить бит 2 о втором байте, или проверить состояние 5 бита в 3 байте.

Спасибо!
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600607
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
{ val := val or (1 shl N); // установка бита
val := val and not (1 shl N); // сброс бита
val := val xor (1 shl N); // инверсия бита
if (val and (1 shl N)) <> 0 then проверка установленного бита
где val - само число,
а N - номер бита (от 0 и до ...) }
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600613
SLab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СССпасибоСпасибо, буду смотреть.
Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system
Так туда влезает 5 байт?
И читает она за раз, не знаю как реализована.
То есть по брейку вижу, что число есть в буфере.

Спасибо
Я давно на делфях не писал, но параметр buffer по идее должен быть указателем на область памяти куда считывать данные, что там у вас за функция, где buffer типа cardinal не понятно.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600614
Ддэкки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, влезет только 32 разряда, 4 из 5 байт
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600615
SLab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SLabСССпасибоСпасибо, буду смотреть.
Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system
Так туда влезает 5 байт?
И читает она за раз, не знаю как реализована.
То есть по брейку вижу, что число есть в буфере.

Спасибо
Я давно на делфях не писал, но параметр buffer по идее должен быть указателем на область памяти куда считывать данные, что там у вас за функция, где buffer типа cardinal не понятно.
Ну вот так и есть
Код: pascal
1.
2.
function FileRead(Handle: THandle; var Buffer; Count: LongWord): Integer;
function FileRead(Handle: THandle; var Buffer: TBytes; Offset, Count: LongWord): Integer;



http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.FileRead
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600617
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он видимо подумал, что Buffer тоже имеет тип Cardinal.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600631
Ддэкки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сейчас еще в школе, но насколько помню, параметр там был точно cardinal....

Код не мой конечно, просто скачал с инета, но он работает.
Хотя и показывает немного не то, что я ожидал (как будто отрезана часть данных).

Если у кого есть рабочий пример, буду признателен.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600640
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДдэккиКод не мой конечно, просто скачал с инета, но он работает.

без комментариев....

Кстати, интересно, в каком порядке байты возвращает Windows через FileRead ?

сначала старшие, потом младшие ?
наоборот ?
Или какими-то кусками, типа сначала младшие 4 байта от старшего к младшему, потом следующие 4 байта?



Ддэкки, открой для себя указатели.
Выставляешь указатель на нужное тебе место буфера.
Читаешь из порта один байт.
Кладешь этот байт по указателю.
Ставишь указатель на следующее место, и т.д.

ДдэккиОткинуть из 40 разрядов 8 правых и 7 левых

и вот тут и начинается веселье, что такое "8 правых" - это тот байт, который ПЕРВЫМ придет в порт ,или который ПОСЛЕДНИМ ?
можешь отдать этот выбор Windows, с вероятностью 50% угадаешь
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600678
Ддекки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В теории я понимаю как это должно быть, но не думаю, что смогу реализовать.

Затыкаюсь на том, как послать запрос на получение ответа.
Если послать надо x40, то шлю 'A' вроде, и т.д.
В это случае получаю всегда один байт. И тут все работает гладко.

Но мне надо послать x41 и получить пять байт.
Тут и начинается свистопляска.
Есть куча исходников, но не получается послать этот один байт. Строой 'А' правда не пробовал.
Ну нет ответа и все...

Спасибо.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600681
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может стоит почитать другие примеры, вместо того, чтобы тыкаться в стену без всякого толку?
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600690
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ддекки,

ты как принимаешь данные от последовательного порта ?
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600703
SLab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorДдекки,

ты как принимаешь данные от последовательного порта ?
Похоже как фишка ляжет, и посылает также.
...
Рейтинг: 0 / 0
Cardinal to binary
    #39600733
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ддэкки,

авторНу вот не понял как мне указать в каком из байтов я хочу что-то делать.
Например, переключить бит 2 о втором байте, или проверить состояние 5 бита в 3 байте.


Смотри самое начало. Что такое байты, их последовательность, как они нумеруются (старший/младший), как раскладываются на биты, и так далее.
По битам смотри битовые операции, их не так много, и суть, в целом, думаю, будет понятна. Есть таблица соответствий (таблица истинности) для каждой операции.
Проще всего (хотя не обязательно именно так): переключать биты XOR'ом, проверять состояние AND'ом, устанавливать (присваивать биту единицу) OR'ом, сбрасывать (присваивать 0) AND'ом. Первый операнд - данные. Второй операнд - маска. В маске устанавливаешь (то есть присваиваешь им единицу) те биты, которые тебе нужно обработать. Остальные оставляешь как есть. Если маска 'чистая', в ней будут сброшены (то есть равны 0) все биты.
Остальное - смотри по таблицам. Там всё довольно просто.

Еще. Пользуясь кодом из интернета, важно иметь в виду то, что написано в статье:

http://www.gunsmoker.ru/2010/05/90.html
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Cardinal to binary
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]