Как преобразовать строку в длинное целое число?

Я новичок в Arduino, и мой первый проект — считыватель RFID. Поскольку мне нужно много списков известных меток, у меня проблема с нехваткой памяти. По этой причине я хочу преобразовать строки типа: «426d9244», «1265dd39»... в длинное целое число. Я знаю, что об этом спрашивали, но как новичок в программировании мне сложно это понять. Также был бы очень признателен за пример.

, 👍2

Обсуждение

Вы можете использовать функцию atol(). Однако я думаю, что это не ваша проблема. Возможно, у вас есть блоки кода, которые повторяются несколько раз. Вы используете Serial.println в сочетании с макросом F()?, @Jot


2 ответа


1

Немного неясно, что вы хотите сделать с 'd' или 'dd' между ними.

Вы можете проверить некоторые функции:

  1. strtok: который может разбить строку на основе разделителей (в вашем случае, вероятно, 'd'). Затем вы получаете массив строк (например, для первой: { "426", "9244"}.

  2. Для каждой строки («426» и «9244») вы используете функцию atol, чтобы преобразовать ее в длинное целое число.

,

1

Если все это известные теги, вы можете поместить их в исходный код как 32-битные целые числа. Нет нужно преобразовать. Или, скорее, пусть компилятор сделает преобразование:

const uint32_t ID_num[ARRAYSIZE] PROGMEM = {
    Oxbcc0f1c3, Ox821a7d39, Ox4924887c, ...
};

Когда вы читаете номер тега в шестнадцатеричном формате, чтобы сравнить его с известным теги, вы преобразуете его в тот же тип, используя strtoul() из avr-libc:

uint32_t tag_id = strtoul(tag_string, NULL, 10);
,

На самом деле, сравнение было выполнено даже без преобразования tag_id..., теперь все работает идеально, ОГРОМНОЕ спасибо!!!, @rafi shoval

Пожалуйста, "примите" ответ, чтобы показать, что он вам помог. Спасибо!, @Nick Gammon