>> 질문 : heartsim 님 (
bcbdn C++Builder Q&A 13206번 )
다음과 같이 헥사로 바꾸었습니다.
UpDown1->Position=AnsiString("0x"+Edit->Text).ToInt();
Edit->Text=IntToHex(UpDown1->Position);
(Edit->Text에는 1, 2, 3,.....9, A, B, C, D, E, F값이 들어갑니다.
근데 이번에는 Edit->Text에 순수한 정수값이 들어가야 하는데 A, B, C, D, E, F 때문에 막상 프로그램 상에 오류가 나더군요.)
그래서 인데...반대로
Hex값을(1,2, 3,....A, B, C, D, E, F) 정수로 바꿀 수 있는 함수가 있나요?
>> 답변 : 박용우(parkyw77) 님 (
bcbdn C++Builder Q&A 13207번 )
String str 이 Hex값이면 int 형으로 바꾸는 함수를 작성해보면...
String HexToInt(String str)
{
String temp, result;
int index =1;
int imsi1 = 0;
int imsi2 = 0;
for(int Length=str.Length(); Length>0; Length--,index++)
{
temp = str.SubString(index,1);
if(temp == "a") temp =10;
if(temp == "b") temp =11;
if(temp == "c") temp =12;
if(temp == "d") temp =13;
if(temp == "e") temp =14;
if(temp == "f") temp =15;
if(Length != 1)
{
imsi1 = temp*(pow(16,(Length-1)));
}
else
{
imsi1 = temp*1;
}
imsi2 += imsi1;
}
result = IntToStr(imsi2);
return result;
}
>> 추가 :
1. 일반적으로 Integer형을 Hex로 보이는 문자열을 만들기 위해
IntToHex를 사용하게 됩니다. 이렇게 되면 원하는 형태로 보여주기가 힘들어서
메모장이나 에디트박스에 바로 표현시에는 이런 형태로 사용하곤 합니다.
Edit1->Text = Format("%4x ", ARRAYOFCONST(((int)temp)))
2. 이렇게 표현된 문자열형을 다시 Integer형을 바꿀려면 위의 답변처럼 약간의
추가 코딩이 필요하게 됩니다. 개인마다 다를 수 있어서 따로 소스는 올리지 않겠습니다.
3. 가끔 char형을 int형으로 바꿀 필요가 있는데, 그때는 다음과 같은 함수를 만들어
놓으면 편할겁니다.
int CharToInt(char src)
{
if(src>='0'&&src<='9')
return (src-'0');
else if(src>='A'&&src<='F')
return (src-'A'+10);
else if(src>='a'&&src<='f')
return (src-'a'+10);
else
return -1;
}
4. 생각해봐야할 것은 타입변환을 지원해주는 함수가 없는 임베이디드 환경에서 코드
작성을 해야한다면, 타입변환 함수를 하나씩 만들어줘야 한다는 겁니다. 그럴때를 대비
해서 타입변환 함수의 소스 분석, 작성을 해두는 것이 급할때 도움이 되겠져..^^;
sprintf, printf도 지원하지 않는데 말이져..^^