парсинг строки в байтовый массив

zsm@nxt.ru
Offline
Зарегистрирован: 27.05.2013

Всем привет!

Поделитесь пожалуйста примерами парсинга такой строки из Serial FF:A7:0:7:92:F6:75:F6: в байтовый массив , в каждой ячейке массива должно получится шестнадцатеричное число такого вида - 0x87.

sadman41
Offline
Зарегистрирован: 19.10.2016

В ячейках массива не хранятся шестнадцатеричные числа. strtok() поможет разбить строку, а strtol - конвертировать.

negavoid
Offline
Зарегистрирован: 09.07.2016
Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Боюсь, что примеров именно такой строки тебе не найти :(

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Повторю здесь, тока тестировай сам

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;
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ой, башка как гудит.  Пива мне внутарь нада. 

zsm@nxt.ru
Offline
Зарегистрирован: 27.05.2013

Спасибо огромное,  это то что нужно.