|
0x开头的16进制没有负数和小数 #region change hex to double private Double HexConverToDouble(string hexString) { if (hexString == "") { return 0; } string data; if (hexString.StartsWith("0x")) { data = hexString.Substring(2); } else { data = hexString; } char[] eachData = data.ToCharArray(); Double result = 0; for (int i = 0; i < eachData.Length; i++) { char charValue = eachData[i];//eachData[m]; Double x = 16;//如果是八进制则写成8就可以 Double y = System.Convert.ToDouble(eachData.Length - i - 1); switch (charValue) { case ''''0'''': break; case ''''1'''': result += 1 * Math.Pow(x,y); break; case ''''2'''': result += 2 * Math.Pow(x,y); break; case ''''3'''': result += 3 * Math.Pow(x,y); break; case ''''4'''': result += 4 * Math.Pow(x,y); break; case ''''5'''': result += 5 * Math.Pow(x,y); break; case ''''6'''': result += 6 * Math.Pow(x,y); break; case ''''7'''': result += 7 * Math.Pow(x,y); break; case ''''8'''': result += 8 * Math.Pow(x,y); break; case ''''9'''': result += 9 * Math.Pow(x,y); break; case ''''A'''': result += 10 * Math.Pow(x,y); break; case ''''B'''': result += 11 * Math.Pow(x,y); break; case ''''C'''': result += 12 * Math.Pow(x,y); break; case ''''D'''': result += 13 * Math.Pow(x,y); break; case ''''E'''': result += 14 * Math.Pow(x,y); break; case ''''F'''': result += 15 * Math.Pow(x,y); break; case ''''a'''': result += 10 * Math.Pow(x,y); break; case ''''b'''': result += 11 * Math.Pow(x,y); break; case ''''c'''': result += 12 * Math.Pow(x,y); break; case ''''d'''': result += 13 * Math.Pow(x,y); break; case ''''e'''': result += 14 * Math.Pow(x,y); break; case ''''f'''': result += 15 * Math.Pow(x,y); break; default : break; } } return result; } #region convert the int32 to hex(string) //这个方法通用性不好,只能是int的转string的16进制 private string specInttoString(int source)//被主要方法调用的一个辅助方法 { if(source <10) { return source.ToString(); } else { switch(source) { case 10: return "A"; case 11: return "B"; case 12: return "C"; case 13: return "D"; case 14: return "E"; case 15: return "F"; default: return ""; } } } private string INTtoHEx(int source)//主要方法 { if(source <10) { return "0x" + source.ToString(); } else if (source <=15) { return "0x" + specInttoString(source); } else { int raiseNum = 16; int addNum = 16; int positionNum = 1; while((source - addNum) >= 0) { positionNum++; addNum = addNum * raiseNum; } int[] valuePositionNum = new int[positionNum]; for(int i = 0;i { valuePositionNum[i] = 0; } int[] valueAddNum = new int[positionNum]; for(int i = 0;i { valueAddNum[i] = Convert.ToInt32( Math.Pow(raiseNum,i)); } int[] decreaseSource = new int[positionNum]; decreaseSource[positionNum -1] = source; for(int i = positionNum -1;i>=0;i--) { while((decreaseSource[i] - valueAddNum[i] ) >=0) { if(i != 0) decreaseSource[i -1] = decreaseSource[i] - valueAddNum[i] ; valuePositionNum[i]++; valueAddNum[i]= valueAddNum[i] +Convert.ToInt32( Math.Pow(raiseNum,i)); } } string[] stringValuePositionNum = new string[positionNum]; for(int i = 0;i { stringValuePositionNum[i] = specInttoString(valuePositionNum[i]); } string result = "0x"; for(int i = positionNum -1;i>=0;i--) { result = result + stringValuePositionNum[i]; } return result; // string[] hexList = new string[positionNum + 1]; // hexList[positionNum] = specInttoString(positionNum); } } #endregion #endregion
|