Какие есть типы данных c++?

Здравствуйте,
скажите в чем дело и как упростить мои награмождения?
есть переменная uint8_t buffer;
и чтобы ее сравнить с моей строкой вот что мне нужно делать
String bff(reinterpret_cast<char*>(buffer));

char *cm1 = "blahblahblah";
String cmd1(cm1);
if (bff == cmd1){ ... }


почему по крайней мере не работает сравнение если объявить кмд1 так String cmd1("blahblah"); ?

суть задачи: получить данные через serial port в ардуине (если интересно из esp8266 модуля) и сравнить их с моей переменной
пс: я использую немного измененную библиотеку ITEADLIB_Arduino_WeeESP8266

я не силен в типах данных и с unsigned int вообще не работал но я так понимаю у меня с серийника в него записывается массив ascii кодов что вобщемто переводиться в char и string
  • Вопрос задан
  • 747 просмотров
Решения вопроса 2
IlyaEvseev
@IlyaEvseev
Opensource geek
1) uint8_t buffer или uint8_t *buffer?
2) если второе, то используйте функцию memcmp.
Ответ написан
Комментировать
@Eddy_Em
Я бы вообще руки отрывал за использование С++ с его жутким оверхедом на микроконтроллерах!
В данном случае даже glibc нафиг не нужна: реализуем strcmp() вручную, аналогично поступаем для memmove и прочих полезных функций. В итоге код будет небольшим + шустрым.
Если нужно сравнить содержимое полученной строки с эталоном, то просто пишем
int strcmp(char *a, char *b){
  int ret = 0;
  do{ ret = (int)(*a++) - (int)(*b++); }while(!ret && *a && *b);
  return ret;
}
char *in = get_serial_buf(); // функция, возвращающая указатель на первый байт в кольцевом приемном буфере USART
char *ref = "строка";
if(!strcmp(in, ref)){ // действия, выполняемые при равенстве строк
}

Если нужно найти подстроку, то аналогичным образом реализуем функцию strstr:
int strstr(char *haystack, char *needle){
  char *ret = NULL, *n = needle+1, n0 = needle[0];
  do{
    int cmp;
    if(*haystack != n0) continue;
    ret = haystack++;
    do{ cmp = (int)(*haystack++) - (int)(*n++); }while(!cmp && *haystack && *n);
    if(!cmp && !*n) break; // found
    ret = NULL; n = needle + 1;
    if(!haystack) break; // haystack ended while not found
  }while(*(++haystack));
  return ret;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы