Как разбить *char и перейти к функции, требующей uint8_t?

У меня есть требование, чтобы событие имело char *newvalue.

void event(char *newValue) {
// Код здесь
}

newValue состоит из двух цифр. Если это 1-9, это "1" "2" и 10+ это "10" "11" и т. д. Он также может содержать буквенные символы, а не только цифры.

Я передаю это функции void function(uint8_t ascii) для отображения на однозначном дисплее. Если я передам newValue, он не зарегистрирует меньше 10, поскольку занимает место.

Итак, я пытаюсь добиться того, чтобы, если это один символ, каким-то образом разделите пробел на uint8_t, а если это 2 цифры, разделите только правую цифру как uint_8 и иметь логическое значение, в котором я включу десятичную точку.

Я гуглил, как сумасшедший, и не нашел ничего работающего. Если кто-то может помочь, это будет оценено. Если вышеизложенное непонятно, дайте мне знать, какая дополнительная информация вам нужна.

В приведенном ниже коде «значение здесь» я хочу поместить самое правое значение из *newvalue.

void onUfcComm2DisplayChange(char *newValue) {
  comdisp.setBrightness(9);
  comdisp.writeDigitAscii(0, 'valuehere');
  comdisp.writeDisplay();
}

void Adafruit_AlphaNum4::writeDigitAscii(uint8_t n, uint8_t a,  boolean d, boolean w) {
  uint16_t font;
  if (w == false) {
    font = pgm_read_word(alphafonttable + a);
  } else {
    font = pgm_read_word(alphafonttableWD + a);
  }
  displaybuffer[n] = font;
  if (d) displaybuffer[n] |= (1 << 14);
}

, 👍1

Обсуждение

Пожалуйста, покажите нам скетч, который вы используете., @VE7JRO

Функцию C++ strtok() можно использовать для разделения строки str на токен, если в строке str есть разделитель. https://www.cplusplus.com/reference/cstring/strtok/., @hcheung

Вот где я был не застрял. нет разделителя., @Tekadept

Я изменил основной код в исходном сообщении, @Tekadept


1 ответ


Лучший ответ:

0

Я не совсем понимаю, что именно вы хотите там иметь, но вот несколько идей, которые могут помочь:

Если вы знаете, какой символ вам нужен, просто получите его. Нравится, если вы всегда хотите второй символ (я думаю, это то, что вам нужно):

void someFunc(char *p)
{
  char secondChar = p[1];
  Serial.print(secondChar);
}

Если вам просто нужен последний символ в строке, независимо от его длины, получите его длину, а затем извлеките этот символ:

void someFunc(char *p)
{
  int len = strlen(p);
  char lastChar = p[len-1];
  Serial.print(lastChar);
}

Если вам нужна последняя цифра в строке, независимо от ее длины и количества случайных символов, которые не являются цифрами после нее:

void someFunc(char *p)
{
  int len = strlen(p);
  char lastDigitChar = 0;
  // Цикл назад, пока не получим первую цифру
  for(int i=len-1; i>=0; i--){
    if(isDigit(p[i]){
      lastDigitChar = p[i];
      break;
    }
  }
  Serial.print(lastDigitChar);
}
,

Спасибо, это именно то, что мне нужно..... Думаю, я просто пытался все усложнить, и это так просто, что работает отлично, спасибо!, @Tekadept