У меня есть доска, которая выводит строки текста на последовательный. Мне нужно сравнить эти строки текста с теми, которые я знаю. По сути, я хотел бы сделать strcmp(thestring,F("knownstring"))
, однако, похоже, не существует версии strcmp, которая использует тип FlashStringHelper *. Существует strcmp_P, который использует const PROGMEM char *
, но это, кажется, совсем другое. Кто-то на форуме Arduino, который я видел, предложил написать один, пройдя флэш-строку с progmem_read_byte (b, i)
, но эта функция фактически не существует, и ближайший эквивалент (pgm_read_byte(b+i)
), похоже, не работает с FlashStringHelper * - я получаю ошибки, такие как error: invalid use of incomplete type 'class __FlashStringHelper'
и error: forward declaration of 'class __FlashStringHelper'
, что подразумевает, что я что-то сделал серьезно не так! Я почти нахожусь в состоянии сдаться и помещать строки в ОЗУ вместо этого, но у arduino не так много, поэтому я хочу избежать этого, если это возможно. Может ли кто-нибудь помочь?Как сравнить __FlashStringHelper * с char * на Arduino?
1
A
ответ
2
__FlashStringHelper
- только специальный тип данных, используемый для определения правильной перегруженной функции/метода для строк Flash.
В любом случае вы не можете использовать strcmp
, как это для сравнения двух строк в оперативной памяти, но в заголовочном <avr/pgmspace.h>
есть свой вариант strcmp_P
для сравнения const char *
помещается в ОЗУ с const char *
помещается в памяти FLASH (в таком порядке).
Таким образом, вы можете использовать:
strcmp_p(thestring, (const char*)F("knownstring"));
// or better:
strcmp_P(thestring, PSTR("knownstring"));
F
макросъемки в основном: (__FlashStringHelper *)PSTR("...")
так это немного излишним, чтобы бросить его обратно в const char*
в первом случае.
Смежные вопросы
- 1. reinterpret_cast от типа 'const char *' для ввода '__FlashStringHelper *' отбрасывает квалификаторы
- 2. Как сравнить массив символов с arduino
- 3. Как сравнить параметр char с char
- 4. Как сравнить int с char?
- 5. Как сравнить Char Strings
- 6. arduino char array serial
- 7. Как сравнить enum в arduino?
- 8. C++ Arduino, передающий char * в массив char *
- 9. Как сравнить litere с массивом char с "("
- 10. Arduino Char сравнение
- 11. сравнить const char * с strcmp
- 12. Как сравнить Signed Char с литеральной константой?
- 13. Как сравнить strstr (LPCWSTR, CHAR *);
- 14. Как сравнить вектор const char []
- 15. Строка сравнить с использованием char
- 16. Python сравнить char с шестнадцатеричным
- 17. Arduino: Неопределенная ссылка на `I2CRW :: readByte (unsigned char, unsigned char) '
- 18. Arduino присоединение строки и * char
- 19. Сравнить строки, идущие как char **
- 20. Сравнить char в linq
- 21. Arduino, работающий с char * неизвестного размера
- 22. Arduino Convert int to Char
- 23. Как я могу сравнить указатель int с указателем на char?
- 24. Сравнить char для пользовательского ввода char MASM
- 25. Как создать массив массивов char в arduino
- 26. Arduino Char Array Mapping Overlap
- 27. Сравнить char array
- 28. Не можете сравнить CHAR
- 29. Java | сравнить char word в массиве char
- 30. Arduino превращает char в строку