{
int len,i,index,pos=strExp->Find(_T("_o"))
CString strTmp,strDF
char ch
double dx
while(pos!=-1)
{
dx=0strTmp=""strDF=""
strExp->Delete(pos,2)
for(i=pos-1i>=0i--)
{
ch=(char)strExp->GetAt(i)
if(ch==56 || ch==57 || ch>=97 &&ch<=102)
{
*strExp="ERROR_八进制数越界_"
return
}
if(ch>=48 &&ch<=55 ||ch==46)
{
strTmp.Insert(0,strExp->Mid(i,1))
strExp->Delete(i)
}
else break
}
if(i==pos-1) {*strExp="ERROR_缺少二元运算符_"return}
index=i
pos=strTmp.Find(_T("."))
if(pos!=-1)
{
strDF=strTmp.Right(strTmp.GetLength()-pos-1)
strTmp.Delete(pos,strTmp.GetLength()-pos)
}
strTmp.MakeReverse()
len=strTmp.GetLength()
for(i=0i<leni++)
{
ch=(char)strTmp.GetAt(i)
dx+=(ch-48)*pow(8.0,i)
}
len=strDF.GetLength()
for(i=0i<leni++)
{
ch=(char)strDF.GetAt(i)
dx+=(ch-48)*pow(8.0,-i-1)
}
strTmp=NtoS(dx)
strExp->Insert(index+1,strTmp)
pos=strExp->Find(_T("xo"))
}
}
void CCalculation::Hex2Dec(CString *strExp) //十六进制数转十进制数
{
int len,i,index,pos=strExp->Find(_T("_h"))
CString strTmp,strDF
char ch
double dx
while(pos!=-1)
{
dx=0strTmp=""strDF=""
strExp->Delete(pos,2)
for(i=pos-1i>=0i--)
{
ch=(char)strExp->GetAt(i)
if(ch>=48 &&ch<=57 || ch>=97 &&ch<=102 ||ch==46)
{
strTmp.Insert(0,strExp->Mid(i,1))
strExp->Delete(i)
}
else break
}
if(i==pos-1) {*strExp="ERROR_缺少二元运算符_"return}
index=i
pos=0
for(i=0i<strTmp.GetLength()i++)
{
if(strTmp.GetAt(i)=='.') pos++
if(pos>1) {*strExp="ERROR_缺少二元运算符_"return}
}
pos=strTmp.Find(_T("."))
if(pos!=-1)
{
strDF=strTmp.Right(strTmp.GetLength()-pos-1)
strTmp.Delete(pos,strTmp.GetLength()-pos)
}
strTmp.MakeReverse()
len=strTmp.GetLength()
for(i=0i<leni++)
{
ch=(char)strTmp.GetAt(i)
if(ch>=48 &&ch<=57)//该数在0~9之间
{
dx+=(ch-48)*pow(16.0,i)
}
else if(ch>=97 &&ch<=102)//该数在a~f之间
{
dx+=(ch-87)*pow(16.0,i)
}
}
len=strDF.GetLength()
for(i=0i<leni++)
{
ch=(char)strDF.GetAt(i)
if(ch>=48 &&ch<=57)//该数在0~9之间
{
dx+=(ch-48)*pow(16.0,-i-1)
}
else if(ch>=97 &&ch<=102)//该数在a~f之间
{
dx+=(ch-87)*pow(16.0,-i-1)
}
}
strTmp=NtoS(dx)
strExp->Insert(index+1,strTmp)
pos=strExp->Find(_T("xh"))
}
}
void CCalculation::Bin2Dec(CString *strExp) //二进制数转十进制数
{
int len,i,index,pos=strExp->Find(_T("_b"))
CString strTmp,strDF
char ch
double dx
while(pos!=-1)
{
dx=0strTmp=""strDF=""
strExp->Delete(pos,2)
for(i=pos-1i>=0i--)
{
ch=(char)strExp->GetAt(i)
if(ch>=50 &&ch<=57 || ch>=97 &&ch<=102)
{
*strExp="ERROR_二进制数越界_"
return
}
if(ch=='0' || ch=='1' ||ch==46)
{
strTmp.Insert(0,strExp->Mid(i,1))
strExp->Delete(i)
}
else break
}
if(i==pos-1) {*strExp="ERROR_缺少二元运算符_"return}
index=i
pos=strTmp.Find(_T("."))
if(pos!=-1)
{
strDF=strTmp.Right(strTmp.GetLength()-pos-1)
strTmp.Delete(pos,strTmp.GetLength()-pos)
}
strTmp.MakeReverse()
len=strTmp.GetLength()
for(i=0i<leni++)
{
ch=(char)strTmp.GetAt(i)
dx+=(ch-48)*pow(2.0,i)
}
len=strDF.GetLength()
for(i=0i<leni++)
{
ch=(char)strDF.GetAt(i)
dx+=(ch-48)*pow(2.0,-i-1)
}
strTmp=NtoS(dx)
strExp->Insert(index+1,strTmp)
pos=strExp->Find(_T("xb"))
}
}
void CCalculation::Dec2Hex(CString *strExp/*strExp须为数字*/) //十进制数转十六进制数
{
bool bMinus=0
if(strExp->GetAt(0)=='-')
{
bMinus=1
strExp->Delete(0)
}
int pos=strExp->Find('.')
CString str,strDec
int nDecInt
double dDec
if(pos!=-1)
{
strDec=strExp->Left(pos)
nDecInt=_wtoi(strDec.GetBuffer(0))
strDec=strExp->Right(strExp->GetLength()-pos)
}
else
{
nDecInt=_wtoi(strExp->GetBuffer(0))
}
strExp->Empty()
while(nDecInt!=0)
{
int nTmp=nDecInt%16
if(nTmp==10) str="a"
else if(nTmp==11) str="b"
else if(nTmp==12) str="c"
else if(nTmp==13) str="d"
else if(nTmp==14) str="e"
else if(nTmp==15) str="f"
else str.Format(_T("%d"),nTmp)
nDecInt/=16
strExp->Insert(0,str)
}
*strExp+="."
if(pos!=-1)
{
dDec=StoN(strDec)
int nCount=0
while(dDec!=0)
{
dDec*=16
int nTmp=(int)dDec
if(nTmp==10) str="a"
else if(nTmp==11) str="b"
else if(nTmp==12) str="c"
else if(nTmp==13) str="d"
else if(nTmp==14) str="e"
else if(nTmp==15) str="f"
else str.Format(_T("%d"),nTmp)
*strExp+=str.Left(pos)
dDec-=nTmp
if(++nCount==17) break
}
}
if(bMinus) strExp->Insert(0,_T("-"))
if(strExp->Find(_T("-1"))!=-1 &&bMinus!=1) *strExp="太大无法表示"
}
void CCalculation::Dec2Oct(CString *strExp) //十进制数转八进制数
{
bool bMinus=0
if(strExp->GetAt(0)=='-')
{
bMinus=1
strExp->Delete(0)
}
int pos=strExp->Find('.')
CString str,strDec
int nDecInt
double dDec
if(pos!=-1)
{
strDec=strExp->Left(pos)
nDecInt=_wtoi(strDec.GetBuffer(0))
strDec=strExp->Right(strExp->GetLength()-pos)
}
else
{
nDecInt=_wtoi(strExp->GetBuffer(0))
}
strExp->Empty()
while(nDecInt!=0)
{
int nTmp=nDecInt%8
str.Format(_T("%d"),nTmp)
nDecInt/=8
strExp->Insert(0,str)
}
*strExp+="."
if(pos!=-1)
{
dDec=StoN(strDec)
int nCount=0
while(dDec!=0)
{
dDec*=8
int nTmp=(int)dDec
str.Format(_T("%d"),nTmp)
*strExp+=str.Left(pos)
dDec-=nTmp
if(++nCount==17) break
}
}
if(bMinus) strExp->Insert(0,_T("-"))
}
void CCalculation::Dec2Bin(CString *strExp) //十进制数转二进制数
{
bool bMinus=0
if(strExp->GetAt(0)=='-')
{
bMinus=1
strExp->Delete(0)
}
int pos=strExp->Find('.')
CString str,strDec
_int64 nDecInt
double dDec
if(pos!=-1)
{
strDec=strExp->Left(pos)
if(strDec.Compare(_T("4294967295"))>0 &&strDec.GetLength()>10 || strDec.GetLength()>10)
{
*strExp="太大无法转换"
return
}
nDecInt=_wtoi(strDec.GetBuffer(0))
strDec=strExp->Right(strExp->GetLength()-pos)
}
else
{
if(strExp->Compare(_T("4294967295"))>0 &&strExp->GetLength()>10 || strExp->GetLength()>10)
{
*strExp="太大无法转换"
return
}
nDecInt=_wtoi(strExp->GetBuffer(0))
}
strExp->Empty()
while(nDecInt!=0)
{
_int64 nTmp=nDecInt%2
str.Format(_T("%d"),nTmp)
nDecInt/=2
strExp->Insert(0,str)
}
*strExp+="."
if(pos!=-1)
{
dDec=StoN(strDec)
int nCount=0
while(dDec!=0)
{
dDec*=2
int nTmp=(int)dDec
str.Format(_T("%d"),nTmp)
*strExp+=str.Left(pos)
dDec-=nTmp
if(++nCount==17) break
}
}
if(bMinus) strExp->Insert(0,_T("-"))
}
进制转换谁都会,难得是错误检查
代码都比较简单,我就不多说了
using Systemusing System.Collections.Genericusing System.Linqusing System.Textnamespace 十进制转二进制2 { class Program { static void Main(string[] args) { while (true) { Console.Clear()Console.WriteLine("只能输入整数!")int count = 0int[] nums = new int[20]Console.WriteLine("输入一个数:")来源:( http://blog.sina.com.cn/s/blog_63fb42cd0100i5ol.html) - 十进制转二进制代码_xs5816_新浪博客 int num = Convert.ToInt32(Console.ReadLine())while (num != 0) //判断输入的数不为0 { nums[count] = num % 2//接收余数 num = num / 2//除2取整 count++} for (int i = count - 1i >= 0i--) //输出余数 Console.Write("{0}", nums[i])Console.WriteLine()Console.WriteLine("按Enter键继续,按End键结束。。。")ConsoleKeyInfo info = Console.ReadKey()if (info.Key == ConsoleKey.End) break} } } }
void CMyDlg::tTo2() // 10进制 转换 为2进制{
int c=atoi(m_editIn)
int o=0
CString r = ""
CString ch = ""
do
{ o = c%2
c = c/2
ch.Format(_T("%d"),o)
r = r+ch
} while (c>0)
int k = r.GetLength()
CString r1 = ""
int i
CString str = r
for(i=0i<ki++)
{
r1+=str.Right(1)
str = str.Left(k-i-1)
}
m_editIn = r1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)