//將16進制的一個字符轉換爲十進制的數 unsigned char CConvNumsDlg::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); } //轉換十進制數 void CConvNumsDlg::OnDecimalConv() { UpdateData(TRUE <a href="http://www.bashkiaprrenjas.com/">online blackjack united states</a>); //先轉換爲二進制 m_strBinary = DecimalToBinary(m_strDecimal); //再轉換爲十六進制 m_strHex = BinaryToHex(m_strBinary); UpdateData(FALSE); } //轉換二進制數 void CConvNumsDlg::OnBinaryConv() { UpdateData(TRUE); //轉換爲十進制 m_strDecimal = BinaryToDecimal(m_strBinary); //轉換爲十六進制 m_strHex = BinaryToHex(m_strBinary); UpdateData(FALSE); } //轉換十六進制數 void CConvNumsDlg::OnHexConv() { UpdateData(TRUE); //先轉換爲二進制 m_strBinary = HexToBinary(m_strHex); //再轉換爲十進制 m_strDecimal = BinaryToDecimal(m_strBinary); UpdateData(FALSE); } //轉換十六進制爲二進制 CString CConvNumsDlg::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++) { //轉換一位十六進制數爲十進制 char h = Hex[nLenth-1-i]; int j = BtoH(h); CString str; str.Format("%d",j); //轉換十進制爲4爲二進制 str = DecimalToBinary(str); strBinary += str; } return strBinary; } //轉換二進制爲十六進制 CString CConvNumsDlg::BinaryToHex(CString strBinary) { int nLength = strBinary.GetLength(); CString str = strBinary; //位數不是四的倍數時補齊 switch(nLength%4) { case 0: break; case 1: strBinary.Format("%d%d%d%s",0,0,0,str); break; case 2: strBinary.Format("%d%d%s",0,0,str); break; case 3: strBinary.Format("%d%s",0,str); break; default: return ""; break; } CString strHex,str1; str1 = ""; nLength = strBinary.GetLength(); for(int i=1;i<=(nLength/4);i++) { //每四位二進制數轉換爲一十六進制數 str = strBinary.Left(4); CString strDecimal = BinaryToDecimal(str); int nDecimal = atoi(strDecimal.GetBuffer(0)); if(nDecimal<10) str1.Format("%d",nDecimal); else { char c = 'A' + (nDecimal-10); str1.Format("%c",c); } strHex += str1; strBinary = strBinary.Right(strBinary.GetLength()-str.GetLength()); } return strHex; } //轉換十進制爲二進制 CString CConvNumsDlg::DecimalToBinary(CString strDecimal) { int nDecimal = atoi(strDecimal.GetBuffer(0)); int nYushu; //餘數 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 CConvNumsDlg::BinaryToDecimal(CString strBinary) { int nLenth = strBinary.GetLength(); char* Binary = new char[nLenth]; Binary = strBinary.GetBuffer(0); int nDecimal = 0; for(int i=0;i<nLenth;i++) { char h = Binary[nLenth-1-i]; char str[1]; str[0] = h; int j = atoi(str); for(int k=0;k<i;k++) { j=j*2; } nDecimal += j; } CString strDecimal; strDecimal.Format("%d",nDecimal); return strDecimal; }