c#进制学习

public partial class Frn进制 : DevComponents.DotNetBar.OfficeForm
{
/*PS:
1):总体思路:无论进制怎么转化,在这里同意转化成十进制,然后在做相应的转化。
如果是二进制转化为八进制:
先2->10
再10->8
如果是八进制转化为十六进制:
先8->10
再10->16
依次类推。。。
2):就是如何设计算法的问题了
首相要知道转化成十进制的算法,就是各个位数上从右向数从0数,相应的进制次幂
例:(110)2表示二进制的110
=1*2的2次方+1*2的1次方+0*2的0次方
其他亦如此。。。。
所以,在string a = To十进制(txt2.Text,2);这句话中,
txt2.Text指的是要转化的数
2指的是当前是2进制,也就是1*2的2次方+1*2的1次方+0*2的0次方中的底数2

再看从十进制转化
例: string b = To八进制(a,8);
a是要从十进制转化的数,8指的是转化为8进制
算法是a除8,留指数,得余数,在用指数除8,知道商是0,得到的余数从下向上数
所以string b = To八进制(a,8);这句话中
因为要转化为八进制,所以a要不断除8

*/
public Frn进制()
{
InitializeComponent();
}

#region 二进制
/// <summary>
/// 2->10->8
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn2to8_Click(object sender, EventArgs e)
{
string a = To十进制(txt2.Text,2);
string b = To八进制(a,8);
txt2new.Text = b;
}


/// <summary>
/// 2->10
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn2to10_Click(object sender, EventArgs e)
{
string a = To十进制(txt2.Text,2);
txt2new.Text = a;
}

/// <summary>
/// 2->10->16
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn2to16_Click(object sender, EventArgs e)
{
string a = To十进制(txt2.Text,2);
string b = To十六进制(a,16);
txt2new.Text = b;
}
#endregion


#region 八进制
/// <summary>
/// 8->10->2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn8to2_Click(object sender, EventArgs e)
{
string a = To十进制(txt8.Text, 8);
string b = To二进制(a,2);
txt8new.Text = b;
}

/// <summary>
/// 8->10
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn8to10_Click(object sender, EventArgs e)
{
string a = To十进制(txt8.Text, 8);
txt8new.Text = a;
}

/// <summary>
/// 8->10->16
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn8to16_Click(object sender, EventArgs e)
{
string a = To十进制(txt8.Text, 8);
string b = To二进制(a, 16);
txt8new.Text = b;
}
#endregion


#region 十进制
/// <summary>
/// 10->2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn10to2_Click(object sender, EventArgs e)
{
string b = To二进制(txt10.Text, 2);
txt10new.Text = b;
}

/// <summary>
/// 10->8
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn10to8_Click(object sender, EventArgs e)
{
string b = To八进制(txt10.Text, 8);
txt10new.Text = b;
}

/// <summary>
/// 10->16
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn10to16_Click(object sender, EventArgs e)
{
string b = To十六进制(txt10.Text, 16);
txt10new.Text = b;
}
#endregion


#region 十六进制
/// <summary>
/// 16->10->2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn16to2_Click(object sender, EventArgs e)
{
string a = To十进制(txt16.Text, 16);
string b = To二进制(a, 2);
txt16new.Text = b;
}

/// <summary>
/// 16->10->8
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn16to8_Click(object sender, EventArgs e)
{
string a = To十进制(txt16.Text, 16);
string b = To八进制(a,8);
txt16new.Text = b;
}

/// <summary>
/// 16->10
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn16to10_Click(object sender, EventArgs e)
{
string a = To十进制(txt16.Text, 16);
txt16new.Text = a;
}
#endregion


#region 进制中转站
/// <summary>
/// 十进制中转站
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private static string To十进制(string x, int jinzhi)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
double a, b = 0;
while (X > 0)
{
a = X % 10;
X = X / 10;
b = b + a * System.Math.Pow(jinzhi, i);
i++;
}
z = Convert.ToString(b);
return z;
}


/// <summary>
/// 二进制中转站
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string To二进制(string x,int jinzhi)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
double a, b = 0;
while (X > 0)
{
a = X % jinzhi;
X = X / jinzhi;
b = b + a * System.Math.Pow(10, i);
i++;
}
z = Convert.ToString(b);
return z;
}


/// <summary>
/// 八进制中转站
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private static string To八进制(string x, int jinzhi)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
double a, b = 0;
while (X > 0)
{
a = X % jinzhi;
X = X / jinzhi;
b = b + a * System.Math.Pow(10, i);
i++;
}
z = Convert.ToString(b);
return z;
}


/// <summary>
/// 十六进制中转站
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private static string To十六进制(string x, int jinzhi)
{
if (string.IsNullOrEmpty(x))
{
return "0";
}
string z = null;
int X = Convert.ToInt32(x);
Stack a = new Stack();
int i = 0;
while (X > 0)
{
a.Push(Convert.ToString(X % jinzhi)));
X = X / jinzhi;
i++;
}
while (a.Count != 0)
z += ToHex(Convert.ToString(a.Pop()));
if (string.IsNullOrEmpty(z))
{
z = "0";
}
return z;
}
private static string ToHex(string x)
{
switch (x)
{
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 x;
}
}
#endregion

}

posted @ 2015-12-14 09:48  pcc  阅读(212)  评论(0)    收藏  举报