文章目录
前言
首先我们知道在计算机当中所有的数据都是用二进制存储,但是我们不方便记忆、查看、使用,所以在代码当中一般使用的是十进制。不过其实我们在代码中我们可以直接使用二进制、十六进制或其它进制。
int a = 0b1010;
Console.WriteLine(a);
int b = 0x1A;
Console.WriteLine(b);
一、十进制转二进制、八进制、十六进制
1、类方法:使用Convert类方法ToString
Console.WriteLine("整型:" + x + "的二进制为:" + Convert.ToString(x, 2));
Console.WriteLine("整型:" + x + "的八进制为:" + Convert.ToString(x, 8));
Console.WriteLine("整型:" + x + "的十六进制为:" + Convert.ToString(x, 16));
打印结果
2、自己写:
- 十进制转二进制
/// <summary>
/// 转换为二进制
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static int ToErJin( int value)
{
int temp = 0;
int shang = 1;
int yushu;
while (shang != 0)
{
shang = ( int )value / 2;
yushu = value % 2;
value = shang;
temp += yushu;
if (shang != 0)
{
temp = temp * 10;
}
}
//最后将 temp 倒序
string tempStr = temp.ToString();
int tempLength = tempStr.Length;
string resultStr = string .Empty;
for ( int i = 0; i < tempLength; i++)
{
resultStr = tempStr[i] + resultStr;
}
return int .Parse(resultStr);
}
二、二进制、八进制、十六进制转十进制
1、使用Convert类方法ToInt32
Console.WriteLine("二进制1010的十进制为:" + Convert.ToInt32("1010", 2));
Console.WriteLine("八进制10的十进制为:" + Convert.ToInt32("10", 8));
Console.WriteLine("十六进制1a的十进制为:" + Convert.ToInt32("1a", 16));
打印结果
2、自己写
/// <summary>
/// 转换为十进制(主要算法:个位数 * 2的零次方 + 十位数 * 2的一次方 + 百位数 * 2的二次方 + ...)
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static int ToShijin2( int value)
{
int temp = 0;
int shang = value;
int yushu;
int mark = 0;
while (shang != 0)
{
yushu = shang % 10;
shang = shang / 10;
temp += yushu * ( int )Math.Pow(2, mark);
mark++;
}
return temp;
}
/// <summary>
/// 二进制转十进制的另一种方法(主要算法:1110111 = 1 * 2~6 + 1 * 2~5 + 1 * 2~4 + 0 * 2~3 + 1 * 2~2 + 1 * 2~1 + 1 * 2~0)
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static int ToShijin( int value)
{
string strValue = value.ToString();
int valueLength = strValue.Length;
int result = 0;
for ( int i = 0; i < valueLength; i++)
{
result += int .Parse(strValue[i].ToString()) * ( int )Math.Pow(2, valueLength - 1 - i);
}
return result;
}
}
经验总结
我们有时十进制转二进制时只会显示少于8位的01,我们可以通过PadLeft进行数据填充
Console.WriteLine("整型:" + x + "的二进制为:" + Convert.ToString(x, 2).PadLeft(8,'0'));
打印结果
扩展延伸
1.十六进制转浮点数
byte[] bt = new byte[4] { 0x7b, 0x14, 0x2e, 0x3f };
float ff = BitConverter.ToSingle(bt, 0);//0.68
2、浮点数转十六进制数
float f = 0.68f;
string str1 = BitConverter.ToString(BitConverter.GetBytes(f)).Replace("-", ""); //结果:7B142E3F
string str2 = BitConverter.ToString(BitConverter.GetBytes(f)); //结果:7B-14-2E-3F