|
|
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Здравствуйте По RS232 порту принимаю 10 байт. В Hex формате вижу это как FF FF FF FF FF. Как мне из этих данных получить то, что хочу, а именно: Откинуть из 40 разрядов 8 правых и 7 левых (еще один разряд - контрольный)? Получается все только целиком. Буфер типа Cardinal. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 09:53 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддэкки, В Cardinal - никак, это число туда не влезет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 11:02 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддэкки, Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 11:32 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддэкки, 10 байт это не 40 разрядов ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:05 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
В школе такого не говорили. В буфере 40 разрядов в двоичном коде, он типа кардинал. Может поэтому и не получается считать, чтоне все влезло. Второй вариант - 16 разрядов и вторая посылка тоже 16 разрядов. Как мне из 16 разрядов выкинуть первый только и три последних? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:26 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Придется почитать про битовые операции... Именно тут помогут AND SHL SHR . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:30 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Если посылка 69 00 00 00 00, То первые две цифры вижу как 1001 0110 Вроде так Получается 10 * 4 разряда Спасибо Но надо откинуть еще по бокам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:33 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
ДдэккиПо RS232 порту принимаю 10 байт. COM-порт отдает данные по одному байту. В зависимости от настройки передающего компьютера, в байте от 5 до 8 битов. В любом случае ты принимаешь по одному байту. Вот и клади каждый байт в то место буфера, куда оно попаде т ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:42 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
ДдэккиЗдравствуйте По RS232 порту принимаю 10 байт. В Hex формате вижу это как FF FF FF FF FF. Как уже написали, это не 10 байт, а 5. Про битовые операции можно почтитать например вот здесь: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=838 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 12:44 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддэкки, И, да, это 5 8-ми битных байт. авторОткинуть из 40 разрядов 8 правых и 7 левых Если 'откинуть' - это обнулить, то делай AND с данными. Второй операнд AND'а называется маска, в ней устанавливаешь биты, которые нужно сохранить в 1, те, которые сбросить - в 0. Делаешь AND, получаешь результат. Если тебе, конечно, не подвинуть биты надо. С задачей, в общем, нужно разобраться вначале. Прежде чем её решать. С данными, с результатом. Что было и что нужно что бы стало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 13:33 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду смотреть. Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system Так туда влезает 5 байт? И читает она за раз, не знаю как реализована. То есть по брейку вижу, что число есть в буфере. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 13:41 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
открой для себя инфу http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi) чтобы не возникало в будущем вопросов, влазит ли 5 байт в Кардинал или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 13:57 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ссулку посмотрел, понятно... Ну вот не понял как мне указать в каком из байтов я хочу что-то делать. Например, переключить бит 2 о втором байте, или проверить состояние 5 бита в 3 байте. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 13:59 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
{ 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 и до ...) } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:02 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
СССпасибоСпасибо, буду смотреть. Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system Так туда влезает 5 байт? И читает она за раз, не знаю как реализована. То есть по брейку вижу, что число есть в буфере. Спасибо Я давно на делфях не писал, но параметр buffer по идее должен быть указателем на область памяти куда считывать данные, что там у вас за функция, где buffer типа cardinal не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:16 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Да, влезет только 32 разряда, 4 из 5 байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:16 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
SLabСССпасибоСпасибо, буду смотреть. Используется функция fileRead и один из параметров buffer , типа Cardinal. Она из модуля system Так туда влезает 5 байт? И читает она за раз, не знаю как реализована. То есть по брейку вижу, что число есть в буфере. Спасибо Я давно на делфях не писал, но параметр buffer по идее должен быть указателем на область памяти куда считывать данные, что там у вас за функция, где buffer типа cardinal не понятно. Ну вот так и есть Код: pascal 1. 2. http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.FileRead ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:20 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
он видимо подумал, что Buffer тоже имеет тип Cardinal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:21 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Я сейчас еще в школе, но насколько помню, параметр там был точно cardinal.... Код не мой конечно, просто скачал с инета, но он работает. Хотя и показывает немного не то, что я ожидал (как будто отрезана часть данных). Если у кого есть рабочий пример, буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 14:51 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
ДдэккиКод не мой конечно, просто скачал с инета, но он работает. без комментариев.... Кстати, интересно, в каком порядке байты возвращает Windows через FileRead ? сначала старшие, потом младшие ? наоборот ? Или какими-то кусками, типа сначала младшие 4 байта от старшего к младшему, потом следующие 4 байта? Ддэкки, открой для себя указатели. Выставляешь указатель на нужное тебе место буфера. Читаешь из порта один байт. Кладешь этот байт по указателю. Ставишь указатель на следующее место, и т.д. ДдэккиОткинуть из 40 разрядов 8 правых и 7 левых и вот тут и начинается веселье, что такое "8 правых" - это тот байт, который ПЕРВЫМ придет в порт ,или который ПОСЛЕДНИМ ? можешь отдать этот выбор Windows, с вероятностью 50% угадаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 15:06 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
В теории я понимаю как это должно быть, но не думаю, что смогу реализовать. Затыкаюсь на том, как послать запрос на получение ответа. Если послать надо x40, то шлю 'A' вроде, и т.д. В это случае получаю всегда один байт. И тут все работает гладко. Но мне надо послать x41 и получить пять байт. Тут и начинается свистопляска. Есть куча исходников, но не получается послать этот один байт. Строой 'А' правда не пробовал. Ну нет ответа и все... Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 15:43 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
может стоит почитать другие примеры, вместо того, чтобы тыкаться в стену без всякого толку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 15:45 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддекки, ты как принимаешь данные от последовательного порта ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 15:58 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
defecatorДдекки, ты как принимаешь данные от последовательного порта ? Похоже как фишка ляжет, и посылает также. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 16:23 |
|
||
|
Cardinal to binary
|
|||
|---|---|---|---|
|
#18+
Ддэкки, авторНу вот не понял как мне указать в каком из байтов я хочу что-то делать. Например, переключить бит 2 о втором байте, или проверить состояние 5 бита в 3 байте. Смотри самое начало. Что такое байты, их последовательность, как они нумеруются (старший/младший), как раскладываются на биты, и так далее. По битам смотри битовые операции, их не так много, и суть, в целом, думаю, будет понятна. Есть таблица соответствий (таблица истинности) для каждой операции. Проще всего (хотя не обязательно именно так): переключать биты XOR'ом, проверять состояние AND'ом, устанавливать (присваивать биту единицу) OR'ом, сбрасывать (присваивать 0) AND'ом. Первый операнд - данные. Второй операнд - маска. В маске устанавливаешь (то есть присваиваешь им единицу) те биты, которые тебе нужно обработать. Остальные оставляешь как есть. Если маска 'чистая', в ней будут сброшены (то есть равны 0) все биты. Остальное - смотри по таблицам. Там всё довольно просто. Еще. Пользуясь кодом из интернета, важно иметь в виду то, что написано в статье: http://www.gunsmoker.ru/2010/05/90.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 17:27 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=117&tid=2041242]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 357ms |

| 0 / 0 |
