2016-03-04 4 views
-1

У меня есть функция, которая тянет координаты X, Y, Z акселерометра и сохраняет их в 3 отдельных целых числах.Преобразование нескольких целых чисел в одну строку

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

Поэтому я хочу объединить целые числа в одну строку и затем отправить эту строку.

у меня есть:

Int xData; 
    Int yData; 
    Int zData; 

char totalData[64] 

Но хотел бы объединить их в строку, которая является чем-то вроде этого:

("X:" + xData + " Y:" + yData + " Z: "xData) 
+0

Действительно ли он принимает строку с завершающим нулевым символом? или это (без знака) указатель на символ и длину? – a3f

ответ

2

Использование sprintf. Он работает как printf, но выход помещается в char массив вместо того, чтобы быть Сенто на стандартный вывод:

sprintf(totalData, "X:%d: Y:%d: Z:%d", xData, yData, zData); 
2

Хорошо, чтобы предотвратить переполнение буфера. Используйте snprintf() и проверьте результаты.

int n = snprintf(totalData, sizeof totalData, "X:%d Y:%d Z: %d", xData, yData, zData); 
if (n >= 0 && n < sizeof totalData) { 
    Success_SendIt(totalData); 
} 

Другой метод, который решает все, но наиболее педантичный, консервативно «правый размер» буфер и не использует магическое число 64.

// Longest string length of an int 
#include <stdlib.h> 
#define INT_STR_LEN (sizeof(int)*CHAR_BIT/3 + 2) 

int xData; 
int yData; 
int zData; 
const char format[] = "X:%d Y:%d Z: %d"; 
char totalData[INT_STR_LEN*3 + sizeof(format) + 1]; 

sprintf(totalData, format, xData, yData, zData); 
SendIt(totalData); 
0

Написать так:

#include <stdio.h> 


int main() 
{ 
    int x, y,z; 
    x=1, y=2, z=3; 
    char w[6]; 
    sprintf(w, "%d%d%d", x,y,z); 
    printf(w); 

} 

изменение w[i] размер от ваших потребностей.