2016-09-06 4 views
0

int8_t 변수를 문자열로 변환해야하는 프로젝트에서 작업 해 왔습니다. 나는 이것을 약간 읽었으며 Strint (int8_t)를 사용하는 것이 옵션이라는 결론에 도달했습니다. 내가 작동하지 않았다 사용되는 방법은 내가 좀 더 연구되고 문자열 (매트)를 발견 어떤 이유C++에서 int를 String으로 변환

int8_t matt = 0; 
matt += 1; 
char string[3]=String(matt); 
tft.textWrite(string);// this is used to display text on an lcd display (arduino) 

실제로 문자열 객체입니다

여기 내 코드입니다. 나는 이것이 사실인지 진실인지 알지 못한다. tft.textWrite(); 작동하도록하려면 다음과 같이해야합니다.

char string[15]= "Hello, World! "; 
tft.textWrite(string); 

나는이 또한 사용하여 시도 :

char string[3]; 
sprintf(string, "%ld", matt); 

그러나이 작동하지 않았다 여기에

는 코드입니다.

아무도 도와 줄 수 있습니까?

감사합니다.

+2

이었던 나는 보지 못했다, 좋은 팔자 'C 스타일에 적용? – George

+1

arduino에서 사용할 수 없습니다. –

+0

'char string [3]'은 (는) 'char string [5]'이어야합니다. '-100', 즉 4 개의 문자 및 종료. 또한 : '그러나 이것은 효과가 없습니까?'라는 의미는 무엇입니까? 어떤 방법으로 실패 했습니까? – 4386427

답변

0

괜찮습니다.

sprintf(string, "%ld", matt); 

% ld는 long int에 사용됩니다. 너는 -128에서 +128 사이의 int8_t를 사용하고있다. % d를 사용하는 것이 더 좋다.

-1

다음 코드는 작동합니다 :

// Example program 
#include <iostream> 
#include <string> 

int main() 
{ 
    int8_t matt = 0; 
    matt += 1; 
    char string[1]; 
    sprintf(string, "%ld", matt); 
    std::cout << string << std::endl; 
    return 0; 
} 

는 "1"을 출력합니다.

+0

"arduino"태그를 보았습니까? 다른 것들 중에는 std :: cout;)이 없습니다 – datafiddler

0

이 코드는

char string[3]; 
sprintf(string, "%ld", matt); 

"%ld" 

는 8 비트 INT를 인쇄 할 수 있습니다 하나를 찾을 필요가 유형으로 long int을 기대 거의 권리입니다. 나는 그것의 "% hh"를 생각한다.

초 당신의

char string[3]; 

가 너무 짧습니다! matt가 100이면 3 문자를 사용하지만 여전히 끝 0 (및 부호)을위한 공간이 필요합니다. 그래서, 그것은 문자열의 끝은 원래 코드에서와 같은 이상 쓸 수

sprintf(string, "%ld", matt); 

가 안전하지 않은 코드 적어도

char string[5]; 

세번째 사용해야합니다

snprintf(string, sizeof(string), "%ld", matt); 
+0

가변 인수 함수에 전달 될 때'int'보다 순위가 낮은 모든 것이 int로 승격되므로 '% d' 형식 지정자를 사용해야합니다. –

+0

@Revolver_Ocelot, 그게 좀 단순해질거야. – Surt

0

먼저 C에 String 유형이없고 고정 크기의 char 배열 (type : char * 또는 char []) 만 사용한다는 것을 명심해야합니다. 우리는 여전히 그것을 문자열이라고 부르지 만 그것을 명심하십시오.

sprintf를 사용한 시도가 나에게 좋았습니다. 환경에 전체 C 표준 라이브러리가 포함되어 있는지 확인해 주시겠습니까?그렇지 않으면 자신의 형식 기능을 코딩해야합니다. 그렇다면 string.h를 포함 시켰습니까?

어쨌든 snprintf()를 사용하여 대상의 크기를 정확하게 지정하면보다 안전합니다.

편집 :이 포스팅은 주제를 벗어 표준 : to_string (0) 잘못 무엇

+2

질문은 C++가 아니라 C에 관한 것입니다. C++에는 확실히 문자열 유형이 있습니다. 우리는 더 이상 문자 배열로 자신을 괴롭히지 않습니다. –

+0

그 말을 믿지 않으셨습니까? X) –

+0

뭘 믿지 않았습니까? –