一、 十进制数据转换为N进制数据
十进制数据Value,可以用如下公式表示为N精致的数据。
Value = Xn * Math.Pow(Item, n) + Xn-1 * Math.Pow(Item, n-1) + .. + X2 * Math.Pow(Item, 1) + X1 * Math.Pow(Itm, 0) ;
其中Xn的范围为(0 <= Xn < Item),n的范围为(n>=2);
有上,我们可以得到十进制数据转换为Item进制的数据的算法如下:
Loop IF (value >= Item) 第i位置的数值 = value % Item; value = value / Item; End IF; ELSE 第i位置的数值 = value; END IF; i++; End Loop;
故十进制的数据转换为N进制的数据,代码实现如下(注意:Item不要超过16进制,除非你自己修改Func中的方法) /// <summary> /// 10进制转为Item进制 /// </summary> /// <param name="value"></param> /// <param name="item"></param> /// <returns></returns> protected string Pares10ToItem(double value, double item) { double sub = 0; double pos = 0; double tmp = 0; double i = 1; string s = ""; do { if (value >= item) { pos = value % item; // i位置上的数值 value = value / item; } else { pos = value; value = 0; } s = (this.Func((int)pos)) + s; i++;
} while (value > 0);
return s; } /// <summary> /// 获取Item进制数据的各个位置上的数值 /// </summary> /// <param name="s"></param> /// <returns></returns> protected string Func(int s) { string result = ""; switch (s) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: { result = s.ToString(); break; } case 10: { result = "A"; break; } case 11: { result = "B"; break; } case 12: { result = "C"; break; } case 13: { result = "D"; break; } case 14: { result = "E"; break; } case 15: default: { result = "F"; break; } } return result; }
二、 N进制数据转换为十进制数据
这个就太简单了,利用循环遍历Value各个位置的数据Xn,用Xn*Math(N, n-1)的累计求和。即可。
三、非十进制数据之间的转换:
这个我们可以分两步来做:第一步将Value_X转换为十进制数据Velue_10;第二步将Value_10转换为Value_N进制数据即可。
|
请发表评论