Побайтовый разбор строки

ant1fr1z
Offline
Зарегистрирован: 08.01.2019

С ардуино только начинаю работать, опыта особо нету, все делаю методом проб. Получаю от модуля Sim800 строку в виде pdu ответа:

0006D60B911326880736F4111011719551401110117195714000

Необходимо разобрать её по байтам и провести определенный манипуляции. Есть ли какой то универсальный способ разложить её в массив байтов для удобства работы.

Допустим мне нужно из строки взять 06, сделать из этого байт, разложить его побитово и посмотреть что там где.

  String pdu = "06D60B911326880736F4111011719551401110117195714000";
  char pdu_header[0];
  pdu.toCharArray(pdu_header, 3);
  byte pduHeaderByte = strtol(pdu_header, NULL, 16);

Понимаю что это очень коряво и можно сделать как то правильнее, направьте пожалуйства в правильное русло.

Нельзя как то попробще сделать из этой строки байт массив и дальше проходится по нужным байтам?

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Универсальные способы наверное не бывают, каждый делает так как умеет/учили в меру своей испорченности.
Берете символ 0 (ваш пример 06),вычитаете код символа 0, умножаете на 16 прибавляете следующую цифру за вычетом кода символа 0 http://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-ni...

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Для чтения бит в байтах есть команды bitRead битовые маски, двоичная арифметика и прочее

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ant1fr1z пишет:
сделать из этого байт, разложить его побитово и посмотреть что там где.

  String pdu = "06D60B911326880736F4111011719551401110117195714000";
  char pdu_header[0];
  pdu.toCharArray(pdu_header, 3);
  byte pduHeaderByte = strtol(pdu_header, NULL, 16);

Понимаю что это очень коряво 

Это не просто коряво - это ни в какие ворота.

В строке №2 Вы описали массив, выделив под него 0 (прописью - ноль) байтов памяти. А втроке №3 Вы зачем-то обманываете функцию toCharArray, нагло заявляя ей, что буфер способен принять три байта.

Так она эти три байта и пишет! Вопрос - куда? Куда по-Вашем она пишет эти три байта?

Правильно "куда попало". Это называется "распашка памяти" и приводит к необъяснимым и неочевидным глюкам в программах.