Помогите создать функцию которая преобразует int в char
- Войдите на сайт для отправки комментариев
Мне нужно отправлять данные в Wi-Fi сериал монитор. Но специфика отправки такова, что перед отправкой нужно сначала всё записать в буфер (подсчитать количество символов и т.д.). и потом уже собранное сообщение отправляется на ESP в wi-fi.
Текст понятно как в буфер добавлять, а вот значения переменных? Решил воспользоваться itoa. Но каждый раз писать четыре строчки не айс. Решил создать функцию, которой мы передаём нашу переменную, там переменная преобразовывается в массив char temp[] и этот массив возвращается функцией... так я хотел чтобы работало. Но... вот скетч
#define BUFF_LENGTH 128 // буфер для отправки на ESP char buff [BUFF_LENGTH]; int S = 245; // переменная void setup() { Serial.begin (38400); //Собираем сообщение в буфер на ESP strcat(buff, "Rasstoyanie = "); strcat(buff, print_intVar(S)); strcat(buff, " km"); strcat(buff, "\r\n"); Serial.println (buff); //Распечатаем пока просто в сериал, для ESP остальной код не привожу, чтобы не мешал for (int k =0;k<BUFF_LENGTH;k++ ) buff[k]=0;// чистим буфер } void loop() { } char* print_intVar (int var){ char temp[4]; itoa(var, temp, 10) ; return temp; }
Скетч работает, но не всегда переменную в чар переводит, ну всмысле не добавляется она в буфер. Сразу говорю, что я хотел функцию просто char Printvar (int var) {} сделать - не скомпилировалось, т.к. возвращается массив символов. Я в указателях ничего пока не петрю. но добавил * и ,о чудо, заработало)) Хотелось бы разобраться, что это я такое сделал и почему иногда не работет.
О каких четырех строчках речь?
было с функцией
без функции, просто много раз это нужно повторять. Многабукаф получится
В строке 27 поставьте перед char ключевое слово static, чтобы буфер не протухал по выходу из функции. А то у вас функция возвращает указатель на что-то там на стеке, непорядок.
itoa (S, &buff[write_position], 10) - заставит itoa() поместить все свои значки в массив, начиная с необходимой позиции.
А если у вас этих операций десятки, то смотрите в сторну sprintf() / sprintf_P().
пасиб, буду пробовать
В строке 27 поставьте перед char ключевое слово static, чтобы буфер не протухал по выходу из функции. А то у вас функция возвращает указатель на что-то там на стеке, непорядок.
Респект, теперь все четко.