static string ConvertDecimalTo(double dNumber, eConvertNumber eType) { string sResult = string.Empty; double dResultRest = 0; double dDivide = 0; switch (eType) { case eConvertNumber.binary: dDivide = BIRNARY; break; case eConvertNumber.octal: dDivide = OCTAL; break; case eConvertNumber.hexa: dDivide = HEXA; break; default: dDivide = 0; break; } while (dNumber > 0.1) { dResultRest = dNumber % dDivide; dNumber = Math.Truncate(dNumber / dDivide); if (eType == eConvertNumber.hexa) { switch (dResultRest) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: sResult += dResultRest.ToString("0"); break; case 10: sResult += "a"; break; case 11: sResult += "b"; break; case 12: sResult += "c"; break; case 13: sResult += "d"; break; case 14: sResult += "e"; break; case 15: sResult += "f"; break; } } else { sResult += dResultRest.ToString("0"); } } return(InvertString(sResult)); }
static string ConvertBinaryTo(string sNumber, eConvertNumber eType) { string sResult = string.Empty; string sTemp = string.Empty; string sTempOctal = string.Empty; string sTempNumber = string.Empty; double dResultRest = 0; //byNumber = byte.Parse(sNumber); sNumber = InvertString(sNumber); switch (eType) { case eConvertNumber.deci: dResultRest = 0; for (int i = 0; i <= sNumber.Length - 1; i++) { dResultRest += int.Parse(sNumber.Substring(i, 1)) * Math.Pow(2, i); } sResult = dResultRest.ToString(); break; case eConvertNumber.octal: /*take the binary number and verify your length * the length should be multiple of 3 * example: 1111 this number have 4 elements and need put more 2 0 in left side, like 001111 ==> 001 111 * after that you need compare each group of 3 numbers with number 421. Put binary number and 421 below, * if binary number for 0 repeat 0, if binary number for 1 put the number reference below. * example: * 001 111 * 421 421 * ------- * 001 421 * * Now, just sum the result separate * * 0+0+1 and 4+2+1 = 1 and 7 * the result is 17 that is 1111 in octal is 17 * * lenght % 3 == 0 the number have elements of 3 */ if (sNumber.Length % 3 != 0) { int iRest = 0; iRest = sNumber.Length % 3; if (iRest == 1) { sNumber = "00" + sNumber; } else if (iRest == 2) { sNumber = "0" + sNumber; } iRest = sNumber.Length % 3; } sTempOctal = string.Empty; while (sNumber.Length > 0) { sTemp = sNumber.Substring(0, 3); if (sNumber.Length > 0) { for (int i = 0; i <= sTemp.Length - 1; i++) { if ((int.Parse(sTemp.Substring(i, 1)) == 0 && i == 0) || (int.Parse(sTemp.Substring(i, 1)) == 0 && i == 1) || (int.Parse(sTemp.Substring(i, 1)) == 0 && i == 2)) { sTempOctal += "0"; } if (int.Parse(sTemp.Substring(i, 1)) == 1 && i == 0) { sTempOctal += "4"; } if (int.Parse(sTemp.Substring(i, 1)) == 1 && i == 1) { sTempOctal += "2"; } if (int.Parse(sTemp.Substring(i, 1)) == 1 && i == 2) { sTempOctal += "1"; } sTempNumber += int.Parse(sTemp.Substring(i, 1)); } sTempNumber += " "; sTempOctal += " "; } sNumber = sNumber.Substring(3, sNumber.Length - 3); } foreach (string sTemp2 in sTempOctal.Split(' ')) { dResultRest = 0; for (int i = 0; i <= sTemp2.Length - 1; i++) { dResultRest += int.Parse(sTemp2.Substring(i, 1)); } if (sTemp2.Length > 0) { sResult += dResultRest.ToString(); } } //sResult = InvertString(sResult); break; case eConvertNumber.hexa: /* * For calculate binary to hexa is the same for calculate binary to octal, but you need 8421 and separete binary in groups of 4 elements * And when final result is more than 9, you need replace for letters like 10 = a, 11 = b, 12 = c, 13 = d, 14 = e and 15 = f * Example: * Binary 1111 * 1111 * 8421 * ---- * 15 = f * the result is letter f that is 1111 in hexa is f */ break; default: break; } return(sResult); }
static string ConvertDecimalPartTo(double dNumber, eConvertNumber eType) { string sResult = string.Empty; double dMultiple = 0; dNumber = dNumber - (int)dNumber; switch (eType) { case eConvertNumber.binary: dMultiple = BIRNARY; break; case eConvertNumber.octal: dMultiple = OCTAL; break; case eConvertNumber.hexa: dMultiple = HEXA; break; default: dMultiple = 0; break; } while (dNumber != 0.0) { dNumber *= dMultiple; int iRest = (int)dNumber; dNumber -= iRest; if (eType == eConvertNumber.hexa) { switch (iRest) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: sResult += iRest.ToString("0"); break; case 10: sResult += "a"; break; case 11: sResult += "b"; break; case 12: sResult += "c"; break; case 13: sResult += "d"; break; case 14: sResult += "e"; break; case 15: sResult += "f"; break; } } else { sResult += iRest.ToString("0"); } } return(sResult); }