C에서 프로그래밍하면 항상 스트레스를 받는 부분중 하나인 문자 숫자 컨버팅입니다. 이 소스는 표준 ANSI C에서 사용할 수 있도록 itoa()를 구현한 예시입니다. 물론 일부 공개된 라이브러리를 사용하여 처리하는 방법도 있겠지만, 해당 기능을 이용하기 위해서 덩치가 큰 라이브러리를 사용하기 무리가 있을 때 사용할 수 있습니다. 

     

    특히 windows에서 c로 개발을 하거나할 때 visual studio에서 제공하는 여러 기능(conio라던지 itoa라던지..)을 쓰면 아주 편리하게 개발할 수 있지만, 유닉스나 리눅스에서 개발을 하게 되면 사소한 기능함수가 지원되지 않아 난처할 때가 있습니다. 대표적인 예가 문자열관련 기능이고, 텍스트 기반의 함수(conio.h)등에서 차이가 많이 나기도 합니다.

     

    아래의 코드는 2009년쯤 검색포털에서 검색하여 찾은 내용이며, 홈페이지 개편때 출처 링크가 사라 져서 현재로서는 출처는 확인이 어렵습니다. 저도 간혹 이용했던 코드라 옮겨둡니다.

     

    /**
     * Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C"
     * with slight modification to optimize for specific architecture:
     */
     
     #include "stdlib.h"
     
    // ... 생략 ...
     
     
    void strreverse(char* begin, char* end) {
        char aux;
        while(end>begin)
        aux=*end, *end--=*begin, *begin++=aux;
    }
    
    void itoa(int value, char* str, int base) {
        static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
         char* wstr=str;
         int sign;
         div_t res;
     
         // Validate base
         if (base<2 || base>35){ *wstr='\0'; return; }
     
         // Take care of sign
         if ((sign=value) < 0) value = -value;
     
         // Conversion. Number is reversed.
         do {
              res = div(value,base);
              *wstr++ = num[res.rem];
         }while(value=res.quot);
         if(sign<0) *wstr++='-'; *wstr='\0';
     
         // Reverse string
         strreverse(str,wstr-1);
    }

     

    위의 코드를 이용하여 itoa()를 구현하여 사용할 수 있습니다. 

     

    C위주로 개발하다보면 cpp나 java가 문자열 파싱에서 얼마나 편리한지 알게 됩니다. 

     

    어쨋거나 조금이라도 도움이 되었길 바랍니다.

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기