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