유광희님 홈피에서 보고 실험하고 올립니다.
보통 16진수 문자열를 변환할때 또는 10진수 문자열을 변환하되 연속으로 바꾸어야 하는 경우
sscanf 함수로 변환하거나, 그냥 직접 변환 루틴을 만들거나 합니다.
실무에서는 적잖게 쓰이는 16진수나 10진수 문자열의 int 형으로의 변환 문제는
때로 작업하는게 귀잖을때가 있습니다.
어렵지는 않지만 괜히 손이 여러번 가고 동작을 또 확인해야 하고...
이럴때 strtoul 함수(string to unsinged long) 를 이용하면 편리합니다.
vcl.h 만 include 한 상태에서 쓸수 있습니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int Radix = 16;
char *endptr;
int Output1 = strtoul("8000 A0", &endptr, Radix);
Caption = String(Output1) + "-" + endptr;
}
//---------------------------------------------------------------------------
캡션에는
32768- A0
가 찍힙니다.
endptr은 8000 다음의 문자인 스페이스 문자를 가르키고 있어
다음 것을 파싱하기도 편리합니다.
raidx는 문자열이 어느 진수로 된 것인가를 가르킵니다.
16은 곧 16진수이고, 8이면 8진수 10이면 10진수 2면 2진수 등이죠...
지금까지 일일이 변환 루틴을 만들었는데... ㅡ..ㅡ;
아주 쬐끔 편리해 질 것 같군요.
자매품 strtol 함수(string to long) 함수도 있습니다.
|