优秀的编程知识分享平台

网站首页 > 技术文章 正文

0基础学C#笔记03:进制转换(c#十进制转化二进制)

nanyue 2024-08-06 18:06:09 技术文章 4 ℃

前言

首先我们知道在计算机当中所有的数据都是用二进制存储,但是我们不方便记忆、查看、使用,所以在代码当中一般使用的是十进制。不过其实我们在代码中我们可以直接使用二进制、十六进制或其它进制。

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
最近发表
标签列表