//---------------------------------------------------------------------------
#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을 값으로 바꾸는 깔끔한 방법은?
: :
: : 감사합니다.