парсинг строки в байтовый массив
- Войдите на сайт для отправки комментариев
Вс, 09/06/2019 - 17:29
Всем привет!
Поделитесь пожалуйста примерами парсинга такой строки из Serial FF:A7:0:7:92:F6:75:F6: в байтовый массив , в каждой ячейке массива должно получится шестнадцатеричное число такого вида - 0x87.
В ячейках массива не хранятся шестнадцатеричные числа. strtok() поможет разбить строку, а strtol - конвертировать.
https://gist.github.com/mattfelsen/9467420
Боюсь, что примеров именно такой строки тебе не найти :(
Повторю здесь, тока тестировай сам
char ParsedString[] = "FF:A7:0:7:92:F6:75:F6"; uint8_t ParsedIndex = 0; int ArraySizeNeed(const char *AArray) { int result = 0; char ch; bool digitflag = false; while ((ch = *AArray++)) { if (!isHexadecimalDigit(ch)) { digitflag = false; continue; } if (digitflag) continue; digitflag = true; result++; } return result; } uint8_t getDecDigit(char AHexChar) { AHexChar = toUpperCase(AHexChar); if ((AHexChar >= '0') && (AHexChar <= '9')) return AHexChar - '0'; return 10 + AHexChar - 'A'; } uint8_t getNextNumber(void) { char ch; uint8_t result = 0; while (true) { ch = ParsedString[ParsedIndex++]; if (not isHexadecimalDigit(ch)) break; result = (result << 4) | getDecDigit(ch); } return result; } void setup() { Serial.begin(115200); Serial << "Program started\n"; int ArraySize = ArraySizeNeed(ParsedString); Serial << "Array Size Need = " << ArraySize << eoln; uint8_t *ReceiveArray = new uint8_t[ArraySize]; ParsedIndex = 0; for (int i = 0; i < ArraySize; i++) { ReceiveArray[i] = getNextNumber(); } for (int i = 0; i < ArraySize; i++) { Serial.print("0x"); Serial.print(ReceiveArray[i], HEX); Serial.print(' '); } Serial.println(); delete[] ReceiveArray; }ой, башка как гудит. Пива мне внутарь нада.
Спасибо огромное, это то что нужно.