Как преобразовать строку в длинное целое число?
Я новичок в Arduino, и мой первый проект — считыватель RFID. Поскольку мне нужно много списков известных меток, у меня проблема с нехваткой памяти. По этой причине я хочу преобразовать строки типа: «426d9244», «1265dd39»... в длинное целое число. Я знаю, что об этом спрашивали, но как новичок в программировании мне сложно это понять. Также был бы очень признателен за пример.
@rafi shoval, 👍2
Обсуждение2 ответа
Немного неясно, что вы хотите сделать с 'd' или 'dd' между ними.
Вы можете проверить некоторые функции:
strtok: который может разбить строку на основе разделителей (в вашем случае, вероятно, 'd'). Затем вы получаете массив строк (например, для первой: { "426", "9244"}.
Для каждой строки («426» и «9244») вы используете функцию atol, чтобы преобразовать ее в длинное целое число.
Если все это известные теги, вы можете поместить их в исходный код как 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
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Вы можете использовать функцию atol(). Однако я думаю, что это не ваша проблема. Возможно, у вас есть блоки кода, которые повторяются несколько раз. Вы используете Serial.println в сочетании с макросом F()?, @Jot