Проблема с преобразованием в const void *

Помогите пожалуйста , никак не пойму как мне преобразовать число параметр в String в
const void * для печати на экране. (void epd_disp_string(const void * p, int x0, int y0))

#include <epd.h>

char TBuf[4];


void setup() {
  Serial.begin(9600);
  float Temp = 100.92;  //температура  число от 0 до 900
  Serial.print(IS(round(Temp), 0));
  epd_disp_string(IS(round(Temp),0),  160, 160);
}

String IS(int xIS, int sIS) {

  if (sIS == 0) {
    TBuf[0] = '0' + xIS / 100;
    TBuf[1] = '0' + (xIS % 100) / 10;
    TBuf[2] = '0' + xIS % 10;
  } else {
    TBuf[0] = '0' + (xIS / 10);
    TBuf[1] = '0' + xIS % 10;

    if (sIS == 1) TBuf[2] = ':';
    else TBuf[2] = ' ';
  }

  return TBuf;
}

void loop() {}

C:\Users\User\AppData\Local\Temp.arduinoIDE-unsaved20221028-4264-ypox.nackn\sketch_nov28a\sketch_nov28a.ino: In function ‘void setup()’:
C:\Users\User\AppData\Local\Temp.arduinoIDE-unsaved20221028-4264-ypox.nackn\sketch_nov28a\sketch_nov28a.ino:10:47: error: cannot convert ‘String’ to ‘const void*’ for argument ‘1’ to ‘void epd_disp_string(const void*, int, int)’
epd_disp_string(IS(round(Temp),0), 160, 160);
^

exit status 1

Compilation error: cannot convert ‘String’ to ‘const void*’ for argument ‘1’ to ‘void epd_disp_string(const void*, int, int)’

Спасибо.

Так char[] или String?

Где TBuf объявлен и что это такое? Код не полный.
Ага, изменился код. Ну хорошо. Все равно не понятно. Почему возвращаемый функцией тип отличается от типа возвращаемой переменной? Да и зачем возвращать из функции значение переменной, которая объявлена глобально? Какой-то звиздец в конструкциях.

#include <epd.h>

void setup() {
  Serial.begin(9600);
  float Temp = 100.92;  //температура  число от 0 до 900
  Serial.print(IS(round(Temp), 0));
  epd_disp_string(IS(round(Temp),0),  160, 160);
}
String IS(int xIS, int sIS) {
char TBuf[4];
  if (sIS == 0) {
    TBuf[0] = '0' + xIS / 100;
    TBuf[1] = '0' + (xIS % 100) / 10;
    TBuf[2] = '0' + xIS % 10;
  } else {
    TBuf[0] = '0' + (xIS / 10);
    TBuf[1] = '0' + xIS % 10;

    if (sIS == 1) TBuf[2] = ':';
    else TBuf[2] = ' ';
  }

  return TBuf;
}

void loop() {}

не понял вопроса…

Функция используется еще для печати на тфт дисплее и олед дисплее поэтому возращает String. В остальном коде работает нормально. Не работает только в коде, где надо печатать на e-paper дисплее. Там по другому функция вывода на дисплей объявлена в библиотеке…

Ну хрен с ним, а переменная возвращаемая тогда почему не string?

я не пойму какую переменную Вы имеете ввиду ?

А какую ты из функции «возвращаешь»? Вот я о ней.

И не мучайтесь.

Евгений Петрович, что-что вы быстро «сдались». Он же не понимает что и к чему.

Настроение такое. Не всё ж @ua6em проявлять неслыханную щедрость :slight_smile:

да , я не смог понять пока что такое const void *p / точнее я так понял что это указатель на данные неопределенного типа. т.е тип я могу использовать любой. поэтому и не могу понять почему он не может принять тип String , хотя явную строку в кавычках берет нормально…
Вы так и не обьяснили про какую переменную говорили ?

Потому что не стараешься. Не понимаешь что я говорю.

char TBuf[4];

Это по твоему string? Или ты какую то другую переменную возвращаешь из функции???
Но, скорее всего, для тебя мои слова как «стук по барабану»…

Buff массив нужен был для того , чтобы преобразовать числа разной длины к определенной заданной длине (
трех значные когда второе значение 0 например 20 в 020
двух значные когда второе значение 1 или 2 например
1 - 2 в 02:
22 в 22:
2 - 3 в 03
33 в 33
А возвращаю в String т.к все остальные функции где используется моя IS() используют string и чтоб каждый раз не заниматься преобразванием сразу возращаю в стринге…
Проблема возникла только с EPD.

т.е const void *p не может понять String потому что в нем нет завершающего нулевого терминатора ? другими словами я неправильно понял const void* т.е неопределенный тип там не значит что любой ?

Другими словами, Вы не знаете языка, на котором пытаетесь писать.
Форум не может заменить учебник, да и не предназначен для этого.

Естественно… Этож песочница… Как раз для людей которые не знают языка и его изучают… Или я неправильно понял раздел для новичков…

из учебника

const void *a
Const is defined constant and cannot be modified.
The literality of the Void is “None Type”, and Void * is “free pointer”, and Void * can point to any type of data.

This is defined a pointer A, A can make a value of any type, but it points to the value must be constant, in which case we cannot modify the pointed object, but can make the pointer to other objects.

Therefore, the Void * type pointer, this type of pointer points to the address of the actual storage data, but the data type of the data stored in this address We have not known.

is “free pointer”, and Void * can point to any type of data. - и Void * может указывать на любой тип данных.

Следовательно, указатель типа Void *, этот тип указателя указывает на адрес фактического хранилища данных, но тип данных данных, хранящихся по этому адресу, нам неизвестен.

Ну как перевел так и понял тип данных неизвестен значит может быть любой …

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

вы упустили из виду разницу между указателем на данные и самими данными.
Ваша функция ожидает указатель, а вы ей подсовываете данные.

спасибо