Как разбить *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);
}
@Tekadept, 👍1
Обсуждение1 ответ
Лучший ответ:
Я не совсем понимаю, что именно вы хотите там иметь, но вот несколько идей, которые могут помочь:
Если вы знаете, какой символ вам нужен, просто получите его. Нравится, если вы всегда хотите второй символ (я думаю, это то, что вам нужно):
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
- Как восстановить числовые данные, отправленные Arduino в двоичном виде
- Преобразование строки в целое число
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
Пожалуйста, покажите нам скетч, который вы используете., @VE7JRO
Функцию C++ strtok() можно использовать для разделения строки str на токен, если в строке str есть разделитель. https://www.cplusplus.com/reference/cstring/strtok/., @hcheung
Вот где я был не застрял. нет разделителя., @Tekadept
Я изменил основной код в исходном сообщении, @Tekadept