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

C++빌더 Q&A
C++Builder Programming Q&A
[60384] 음.. 위에거 자리수가 좀 작아보여서..__int64를 써 봤습니다..
제리압빠. [kamizen] 1410 읽음    2010-03-04 15:55
//---------------------------------------------------------------------------
#include 
#pragma hdrstop

#include 
#include 
#include 

__int64 HEXASTRTODECIMAL( char * str , int len );
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
    char data[100];
    memset( data , 0x00 , sizeof( data ));

    scanf(  "%s" , data );

    printf( "INPUT  Hexa Str : %s\n" , data );
    printf( "Output Decimal  : %I64d\n" , HEXASTRTODECIMAL( data , strlen( data )));

    getch();
    return 0;
}
//---------------------------------------------------------------------------
__int64 HEXASTRTODECIMAL( char * str , int len )
{
    int key_map[255];
    __int64 rt   = 0;
    __int64 calc = 0;

    memset( key_map , -1 , sizeof( key_map ));

    for( int i = '0' , j = 0  ; i <= '9' ; i++ , j++ ) key_map[i] = j;
    for( int i = 'a' , j = 10 ; i <= 'f' ; i++ , j++ ) key_map[i] = j;
    for( int i = 'A' , j = 10 ; i <= 'F' ; i++ , j++ ) key_map[i] = j;


    for( int i = len -1 , j = 0  ; i >= 0 ; i-- , j++)
    {
        calc = 1;
        for( int x = 0  ; x < j ; x++ )  calc*=16;
        rt += ( key_map[str[i]] * calc );
    }

    return rt;
}


처리 결과
ffffffff
INPUT  Hexa Str : ffffffff
Output Decimal  : 4294967295

FFFFFFFFFFFF
INPUT  Hexa Str : FFFFFFFFFFFF
Output Decimal  : 281474976710655

7fffffffffffffff
INPUT  Hexa Str : 7fffffffffffffff
Output Decimal  : 9223372036854775807

즐플 하세염~~!



제리압빠. 님이 쓰신 글 :
: 음.. 팀작업이라서.. 딴 사람 작업 분량이 안끝나서.. 심심하던 차에 이걸 봤네용...
:
: 그냥 심심해서 함 만들어봤습니다..
:
: key_map 변수를 전역으로 놓고 , 초기화 루틴도 메인으로 빼면 실행마다 처리 안하고 처리 되겠네요..
: 한자리씩 세팅하는게 거시기 한거 같아서요..
: 성호님 StrToInt 한방에 내부 처리 되는 거지만 ㅎㅎ 그냥 심심해서 만들어봤습니다.
:
:
  
: //---------------------------------------------------------------------------
: #include 
: #pragma hdrstop
: 
: #include 
: #include 
: #include 
: 
: int HEXASTRTODECIMAL( char * str , int len );
: //---------------------------------------------------------------------------
: #pragma argsused
: int main(int argc, char* argv[])
: {
:     char data[100];
:     memset( data , 0x00 , sizeof( data ));
: 
:     scanf(  "%s" , data );
: 
:     printf( "INPUT  Hexa Str : %s\n" , data );
:     printf( "Output Decimal  : %ld\n" , HEXASTRTODECIMAL( data , strlen( data )));
: 
:     getch();
:     return 0;
: }
: //---------------------------------------------------------------------------
: int HEXASTRTODECIMAL( char * str , int len )
: {
:     int key_map[255]; // 이거 전역
:     int rt   = 0;
:     int calc = 0;
: 
:     memset( key_map , -1 , sizeof( key_map )); // 이거
: 
:     for( int i = '0' , j = 0  ; i <= '9' ; i++ , j++ ) key_map[i] = j;  // 이거 
:     for( int i = 'a' , j = 10 ; i <= 'f' ; i++ , j++ ) key_map[i] = j;  // 이거
:     for( int i = 'A' , j = 10 ; i <= 'F' ; i++ , j++ ) key_map[i] = j; // 이거 전역으로 빼면 한번만 실행해서 초기화 완료.
:                                                                                          // 클레스에 메소드로 넣는다면 초기화 에서 해주면 될듯
: 
:     for( int i = len -1 , j = 0  ; i >= 0 ; i-- , j++)
:     {
:         calc = 1;
:         for( int x = 0  ; x < j ; x++ )  calc*=16;
:         rt += ( key_map[str[i]] * calc );
:     }
:     return rt;
: }
: 
 
:
: 테스트 결과
: 64
: INPUT  Hexa Str : 64
: Output Decimal  : 100
: ffff
: INPUT  Hexa Str : ffff
: Output Decimal  : 65535
: FFFF
: INPUT  Hexa Str : FFFF
: Output Decimal  : 65535
: FF
: INPUT  Hexa Str : FF
: Output Decimal  : 255
:
: 나름은 제대로 나오는거 같네요..
: 즐플하십시요~~!
:
: PS : </conio.h></stdlib.h></stdio.h></vcl.h> 코드 에디터에서 이거 나오는 거는 위에 인크루드된 넘들이 테그로
:        확인되서... "닫아야하는 군" 하고 친절하게 달아주는거 같군요.
:
:
: 땅주인 님이 쓰신 글 :
: : 16진수 스트링을 decimal으로 변환하는 매크로를 작성했는데..
: :
: : 매크로 * 값 하면 에러 나고..
: : 값 * 매크로 하면 에러가 나지 않네요.. 매크로를 수식 중간에 쓸 수 없다.. 뭐 이런 얘기는 못 들은 것 같은데..
: :
: :
: : #define HEXTODECIMAL(x)	    (( x == "0") ?  0 :      \
: : 							(( x == "1") ?  1 :      \
: : 							(( x == "2") ?  2 :      \
: : 							(( x == "3") ?  3 :      \
: : 							(( x == "4") ?  4 :      \
: : 							(( x == "5") ?  5 :      \
: : 							(( x == "6") ?  6 :      \
: : 							(( x == "7") ?  7 :      \
: : 							(( x == "8") ?  8 :      \
: : 							(( x == "9") ?  9 :      \
: : 							(( x == "A") ? 10 :      \
: : 							(( x == "B") ? 11 :      \
: : 							(( x == "C") ? 12 :      \
: : 							(( x == "D") ? 13 :      \
: : 							(( x == "E") ? 14 :      \
: : 							(( x == "F") ? 15 : 0 ))))))))))))))));
: : ....
: : 	UnicodeString HexStr = "A5";
: : 	int i,j,k;
: : 	UnicodeString a,b;
: : 	a = HexStr.SubString(1,1).UpperCase();
: : 	b = HexStr.SubString(2,1).UpperCase();
: : 
: : 	i = HEXTODECIMAL(a) * 16;    // Error~! but =>  i = 16 * HEXTODECIMAL(a); => Ok~!
: : 	j = HEXTODECIMAL(b);
: : 
: : 	k = i + j;
: : 

: :
: : [BCC32 Error] Unit2.cpp(48): E2062 Invalid indirection
: :
: : 코스 상 좀 깔끔하지 않은 것 같아서.. 왜 이런 것이지요?
: : 그리고, Hex String을 값으로 바꾸는 깔끔한 방법은?
: :
: : 감사합니다.

+ -

관련 글 리스트
60379 [질문] 이상한 매크로 동작... ? (HexToDecimal 변환 시..) 땅주인 1138 2010/03/04
60383     Re:[질문] 이상한 매크로 동작... ? (HexToDecimal 변환 시..) 제리압빠. 1266 2010/03/04
60384         음.. 위에거 자리수가 좀 작아보여서..__int64를 써 봤습니다.. 제리압빠. 1410 2010/03/04
60381     Re:[질문] 이상한 매크로 동작... ? (HexToDecimal 변환 시..) 장성호 1226 2010/03/04
60380     Re:[질문] 이상한 매크로 동작... ? (HexToDecimal 변환 시..) Lyn 1129 2010/03/04
60382         Re:Re:[질문] 이상한 매크로 동작... ? (HexToDecimal 변환 시..) 땅주인 1479 2010/03/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.