2016-03-04 39 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陣列的而不是澡堂到stdout:

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]大小取決於您的需要。