C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[338] 진수변환 함수입니다..
민인학 [h2h1995] 10193 읽음    2002-05-23 12:52
저희 회사 프로젝트에 넣을려고 만들어본 진수변환 소스입니다..

2,8,10,16<->2,8,10,16 상호변환이 가능합니다..
단 16진수입력시에 0x를 빼고 하시면 됩니다.

사용방법은

void main(void)
{
  char *base1, *base2;

  base1 = BaseConverter(16, "ffffff", 10);
  printf("%s",base1);

  base2 = BaseConverter(16, "ffffff", 2);
  printf("%s",base2);

  free(base1);
  free(base2);
}

위는 16진수 ffffff를 10진수와 2진수로 변환하여 주는 예제입니다..



char *Dec2Bin(unsigned long  value)
{
    int temp[MAX_SIZE], i;
    char result[MAX_SIZE];
        char bin[MAX_SIZE];

    for(i=255; i>=0; i--) {
            temp[i]=value&1;
            value=value>>1; //오른쪽으로 한 비트만 이동하여 2진수를 만든다.
        }

    for(i=0;i<=255;i++) {
        if(temp[i]==0)
            result[i] = '0';
        if(temp[i]==1)
            result[i] = '1';
                result[i+1]=NULL;
    }

        // 2진수 앞의 0은 짤라냄
        int n;
        for(n=0;n<=255;n++) {
                if(result[n]=='1')
                        break;
        }
        int x=0;
        for(int i=n;i<=255;i++) {
                bin[x] = result[i];
                bin[x+1] = NULL;
                x++;
        }

    return strdup(bin);
}

// 진법 변환 2,8,10,16 <-> 2,8,10,16
char *BaseConverter(int rsc, char *data, int obj)
{
        char *endptr;
        unsigned long decvalue;
        char temp[1024];
        int i;

        for(i=0;i<1024;i++)temp[i]=NULL;

        // 무조건 10진수로 변경을 함
        decvalue = strtoul(data, &endptr, rsc);

        switch(obj) {
                case 2:
                        sprintf(temp, "%s", Dec2Bin(decvalue));
                        break;
                case 8:
                        sprintf(temp, "%o", decvalue);
                        break;
                case 10:
                        sprintf(temp, "%lu", decvalue);
                        break;
                case 16:
                        sprintf(temp, "%x", decvalue);
                        break;
        }
       
        return strdup(temp);
}
꼴.Free [kkol]   2002-11-16 20:52 X
strdup를 사용하면 리턴 받은 포인터에서 메모리 해제 따로 해줘야 함다!!

+ -

관련 글 리스트
338 진수변환 함수입니다.. 민인학 10193 2002/05/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.