Помогите создать функцию которая преобразует 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) {} сделать - не скомпилировалось, т.к. возвращается массив символов. Я в указателях ничего пока не петрю. но добавил * и ,о чудо, заработало)) Хотелось бы разобраться, что это я такое сделал и почему иногда не работет.
О каких четырех строчках речь?
было с функцией
без функции, просто много раз это нужно повторять. Многабукаф получится
strcat(buff, "Rasstoyanie = "); {char temp[4]; itoa(S, temp, 10); strcat(buff, temp);} strcat(buff, " km"); strcat(buff, "\r\n");В строке 27 поставьте перед char ключевое слово static, чтобы буфер не протухал по выходу из функции. А то у вас функция возвращает указатель на что-то там на стеке, непорядок.
itoa (S, &buff[write_position], 10) - заставит itoa() поместить все свои значки в массив, начиная с необходимой позиции.
А если у вас этих операций десятки, то смотрите в сторну sprintf() / sprintf_P().
пасиб, буду пробовать
В строке 27 поставьте перед char ключевое слово static, чтобы буфер не протухал по выходу из функции. А то у вас функция возвращает указатель на что-то там на стеке, непорядок.
Респект, теперь все четко.