|
포럼에서 참고한 소스부분입니다. 참고하세요.
//---------------------------------------------------------------------------2007/4/2 진수 변환 및 Write Data Make 루틴
char* __fastcall TMainForm::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* __fastcall TMainForm::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)); // 2진수로
break;
case 8:
sprintf(temp, "%o", decvalue); // 8진수로
break;
case 10:
sprintf(temp, "%lu", decvalue); // 10진수로
break;
case 16:
sprintf(temp, "%04x", decvalue);
break;
case 168:
sprintf(temp, "%8x", decvalue);
break;
}
return strdup(temp);
}
사용할때 BaseConverter(16, lHex.c_str(), 10);
---> 이런식으로 사용하시면 됩니다. BaseConverter(2, lHex.c_str(), 16);
그분 성함이 생각이 안나서 성함은 못적네요...^^ 아마 검색하시면 나올겁니다. BaseConverter로..
신종열 님이 쓰신 글 :
: 왕초보입니다....
: 2진수에서 16진수로 16진수에서 2진수로 진수변환어떤식으로해야하나요?
|