>

int 를 어떻게 변환합니까  (정수) 문자열? struct 의 데이터를 변환하는 함수를 만들려고합니다.  파일로 저장하려면 문자열에 넣으세요.


  • 답변 # 1

    수정 :의견에서 지적했듯이 itoa()  표준이 아니므로 경쟁 답변에서 제안 된 sprintf () 접근 방식을 더 잘 사용하십시오!

    <시간>

    itoa() 를 사용할 수 있습니다  정수 값을 문자열로변환하는 함수입니다.

    예는 다음과 같습니다.

    int num = 321;
    char snum[5];
    // convert 123 to string [buf]
    itoa(num, snum, 10);
    // print our string
    printf("%s\n", snum);
    
    
    <시간>

    구조를 파일로 출력하려면 미리 값을 변환 할 필요가 없습니다. printf 형식 스펙을 사용하여 값을 출력하는 방법을 표시하고 printf 제품군의 연산자를 사용하여 데이터를 출력 할 수 있습니다.

  • 답변 # 2

    sprintf 를 사용할 수 있습니다  또는 어쩌면 snprintf  있다면 :

    char str[ENOUGH];
    sprintf(str, "%d", 42);
    
    

    str 의 문자 수 (및 종료 문자)  다음을 사용하여 계산할 수 있습니다 :

    (int)((ceil(log10(num))+1)*sizeof(char))
    
    

  • 답변 # 3

    짧은 대답은

    snprintf( str, size, "%d", x );
    
    

    더 길수록 : 먼저 충분한 크기를 찾아야합니다. 와이즈 비즈   snprintf 로 전화하면 길이를 알려줍니다.  첫 번째 매개 변수로 :

    NULL, 0
    
    

    널 종결자를 위해 한 문자를 더 할당하십시오.

    snprintf( NULL, 0, "%d", x );
    
    

    모든 형식 문자열에 대해 작동하면 int x = -42; int length = snprintf( NULL, 0, "%d", x ); char* str = malloc( length + 1 ); snprintf( str, length + 1, "%d", x ); ... free(str); 를 사용하여 float 또는 double을 문자열로 변환 할 수 있습니다 "%g" 를 사용하여 int를 16 진수로 변환 할 수 있습니다 등등.

  • 답변 # 4

    gcc에 대한 다양한 버전의 itoa를 살펴본 후, 가장 유연한 버전은 이진수, 십진수 및 16 진수로의 변환을 처리 할 수있는 것으로 나타났습니다. 네 번째 버전은 http://www.strudel.org.uk/itoa/에 있습니다. "%x" 동안 / sprintf  장점이 있지만, 소수 변환 이외의 다른 음수는 처리하지 않습니다. 위의 링크가 오프라인이거나 더 이상 활성화되어 있지 않으므로 아래에 네 번째 버전을 포함 시켰습니다.

    snprintf
    
    

  • 답변 # 5

    이것은 오래되었지만 다른 방법입니다.

    /**
     * C++ version 0.4 char* style "itoa":
     * Written by Lukás Chmela
     * Released under GPLv3.
     */
    char* itoa(int value, char* result, int base) {
        // check that the base if valid
        if (base < 2 || base > 36) { *result = '\0'; return result; }
        char* ptr = result, *ptr1 = result, tmp_char;
        int tmp_value;
        do {
            tmp_value = value;
            value /= base;
            *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
        } while ( value );
        // Apply negative sign
        if (tmp_value < 0) *ptr++ = '-';
        *ptr-- = '\0';
        while(ptr1 < ptr) {
            tmp_char = *ptr;
            *ptr--= *ptr1;
            *ptr1++ = tmp_char;
        }
        return result;
    }
    
    
    #include <stdio.h> #define atoa(x) #x int main(int argc, char *argv[]) { char *string = atoa(1234567890); printf("%s\n", string); return 0; }

  • 이전 html - PHP 스크립트를 성공적으로 처리 할 때 모달 박스를 여는 방법은 무엇입니까?
  • 다음 MySQL date_format () 함수 대 SQL Like 연산자