//十进制->二进制
CString DecimalToBinary(CString strDecimal)
{
int nDecimal = atoi(strDecimal.GetBuffer(0));
int nYushu; //óàêy
int nShang; //éì
CString strBinary = "";
char buff[2];
CString str = "";
BOOL bContinue = TRUE;
while(bContinue)
{
nYushu = nDecimal%2;
nShang = nDecimal/2;
sprintf(buff,"%d",nYushu);
str = strBinary;
strBinary.Format("%s%s",buff,str);
nDecimal = nShang;
if(nShang==0)
bContinue = FALSE;
}
return strBinary;
}
//十六进制到二进制
CString HexToBinary(CString strHex)
{
int nLenth = strHex.GetLength();
char* Hex = new char[nLenth];
Hex = strHex.GetBuffer(0);
CString strBinary = "";
for(int i=0;i<nLenth;i++)
{
//×a??ò???ê?áù????êy?aê?????
char h = Hex[nLenth-1-i];
int j = BtoH(h);
CString str;
str.Format("%d",j);
//×a??ê??????a4?a?t????
str = DecimalToBinary(str);
strBinary += str;
}
return strBinary;
}
//用到的一个函数
unsigned char BtoH(char ch)
{
//0-9
if (ch >= '0' && ch <= '9')
return (ch - '0');
//9-15
if (ch >= 'A' && ch <= 'F')
return (ch - 'A' + 0xA);
//9-15
if (ch >= 'a' && ch <= 'f')
return (ch - 'a' + 0xA);
return(255);
}
十六进制数转换成二进制数
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
void main()
{
char *str1="f123ed26a";
char *str2[16]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
int i;
int index;
int len1=strlen(str1);
for(i=0;i<len1;i++)
{
if(str1[i]>='a')
{
index=10+(str1[i]-'a');
}
if(str1[i]<'a')
{
index=0+(str1[i]-'0');
}
printf("%s ",str2[index]);
}
printf("/n");
}
将LONG转为ASC
//将LONG转为ASC
//例:if sour=8796;nums=6;then dest=0x38;0x37;0x39;0x36;0x20;0x20
void long_to_asc(long sour,char nums,char *dest)
{
int count=1;
long sour1;
sour1=sour;
memset(dest,' ',nums);
while(1)
{
if((sour1/10)!=0)
count++;
else break;
sour1 /= 10;
}
while(count>0)
{
*(dest+count-1)=(BYTE)((sour%10)+'0');
sour /= 10;
count --;
}
}
将BCD码转为ASC串
//将BCD码转为ASC串(0-f可转)
//NUMS==SOUR的BCD码数
//例:if sour=9999,nums=4 then dest=0x39,0x39,0x39,0x39
// if sour=99999f nums=5,then dest=0x39,0x39,0x39,0x39,0x39 "f"is cut
int bcd_to_asc(char *sour,int nums,char *dest)
{
int i,len,oddno=0;
len=nums/2+nums%2;
if((nums%2)!=0)
oddno=1;
memset(dest,'/0',nums);
for(i=0;i<len;i++)
{
*(dest+2*i)=(*(sour+i)>>4)+0x30;
if((i<(len-1))||((i==(len-1))&&(oddno==0)))
*(dest+2*i+1)=(*(sour+i)&0x0f)+0x30;
}
return 0;
}
将ASC串转为BCD码
//将ASC串转为BCD码
//NUMS==SOUR的ASC数
//例:if sour="9999",nums=4 then dest=0x99,0x99
int asc_to_bcd(unsigned char *sour,int nums,unsigned char *dest)
{
int i,len;
unsigned char result;
unsigned char tmpbuf[10000];
if(nums>9999)
return 1;
len=nums/2+nums%2;
if(nums%2!=0)
{
tmpbuf[nums]=0x30;
memcpy(tmpbuf,sour,nums);
}
else
memcpy(tmpbuf,sour,nums);
for(i=0;i<len;i++)
{
result=*(tmpbuf+2*i);
if((result>=0x30) && (result<=0x39))
*(dest+i)=(result-0x30)*0x10;
else if((result>=0x41) && (result<=0x46))
*(dest+i)=(result-55)*0x10;
else if((result>=0x61) && (result<=0x66))
*(dest+i)=(result-87)*0x10;
else
result=0x30;
result=*(tmpbuf+2*i+1);
if((result>=0x30) && (result<=0x39))
*(dest+i)+=(result-0x30);
else if((result>=0x41) && (result<=0x46))
*(dest+i)+=(result-55);
else if((result>=0x61) && (result<=0x66))
*(dest+i)+=(result-87);
else
*(dest+i)+=0x30;
}
return 0;
}
十六进制串转换成十进制
int HexToLen(char *chIn)
{
short len,offset;
short nLen;
len = strlen(chIn);
int lOut = 0;
int i=0;
for(i=0;i<len;i++)
{
if( chIn[i]!=0x30 )
break;
}
offset = i; //有效数字位
for(i=offset;i<len;i++)
{
if((chIn[i]>='A')&&(chIn[i]<='F'))
chIn[i] = chIn[i]-'A'+10;
else
chIn[i] = chIn[i]-'0';
nLen = chIn[i]/16*10 + chIn[i]%16;
lOut = lOut*16 + nLen;
}
return lOut;
}