kil00 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба Здравствуйте! Подскажите, пожалуйста, как написать парсер на Си, который будет принимать (по USART через DMA) и обрабатывать бинарные(hex) числа? Я разобрался, как это сделать с помощью строк и ASCII, но, например, если мне нужно получить данные типа 0x12 0x23 0x34 0x00 0x56, то с помощью строк и ASCII это сделать не удаётся из-за того, что 0x00 воспринимается как нуль-терминатор, т.о. и 0x00 и 0х56 опускаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба помощью строк и ASCII это сделать не удаётся из-за того, что 0x00 воспринимается как нуль-терминатор, т.о. и 0x00 и 0х56 опускаются. Использовать строки не получится. т.о. и 0x00 и 0х56 опускаются. Принимать данные как есть, складывать с какой-нибудь подходящий по размеру буфер и читать подходящим к случаю образом. unsigned short var; unsigned char buf[2]; buf[0]=ReadByte(); buf[1]=ReadByte(); var=*(unsigned short *)buf; Но всё это зависит от платформы, индианности и говорят, что так делать не есть правильно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба и обрабатывать бинарные(hex) числа? Ничего не понимаю: так все-же, бинарные или hex? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба Если валятся бинарные данные, то, очевидно, парсер никакой не нужен. Потому что парсить нечего. Если данные идут в виде строки binhex, то парсить можно функцией strtoul (брать по паре символов), либо sscanf, либо написать свою функцию для преобразования в бинарный вид. Результат обрабатывать как строку нельзя, нужно хранить сами данные и их длину. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YAM 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба Byte stuffing Вам в помощь для этого... Почитайте о нем. Принимаются любые бинарные данные с небольшим оверхедом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба wake, если конкретизировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kil00 0 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба Спасибо за ответы! Пока не очень всё понятно. Буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться