Побайтовый разбор строки
- Войдите на сайт для отправки комментариев
Втр, 08/01/2019 - 19:14
С ардуино только начинаю работать, опыта особо нету, все делаю методом проб. Получаю от модуля Sim800 строку в виде pdu ответа:
0006D60B911326880736F4111011719551401110117195714000
Необходимо разобрать её по байтам и провести определенный манипуляции. Есть ли какой то универсальный способ разложить её в массив байтов для удобства работы.
Допустим мне нужно из строки взять 06, сделать из этого байт, разложить его побитово и посмотреть что там где.
String pdu = "06D60B911326880736F4111011719551401110117195714000"; char pdu_header[0]; pdu.toCharArray(pdu_header, 3); byte pduHeaderByte = strtol(pdu_header, NULL, 16);
Понимаю что это очень коряво и можно сделать как то правильнее, направьте пожалуйства в правильное русло.
Нельзя как то попробще сделать из этой строки байт массив и дальше проходится по нужным байтам?
Универсальные способы наверное не бывают, каждый делает так как умеет/учили в меру своей испорченности.
Берете символ 0 (ваш пример 06),вычитаете код символа 0, умножаете на 16 прибавляете следующую цифру за вычетом кода символа 0 http://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-ni...
Для чтения бит в байтах есть команды bitRead битовые маски, двоичная арифметика и прочее
Понимаю что это очень коряво
Это не просто коряво - это ни в какие ворота.
В строке №2 Вы описали массив, выделив под него 0 (прописью - ноль) байтов памяти. А втроке №3 Вы зачем-то обманываете функцию toCharArray, нагло заявляя ей, что буфер способен принять три байта.
Так она эти три байта и пишет! Вопрос - куда? Куда по-Вашем она пишет эти три байта?
Правильно "куда попало". Это называется "распашка памяти" и приводит к необъяснимым и неочевидным глюкам в программах.