C# 进制转换的实现(二进制、十六进制、十进制互转)

下面我将为大家详细讲解 C# 中的进制转换实现,内容包括二进制、十六进制、十进制互转的方法。

前置知识

在进行进制转换之前,我们需要了解以下几个概念:

  • 二进制:以 0、1 为基础的计数系统。
  • 十进制:以 0-9 为基础的计数系统。
  • 十六进制:以 0-9 和 A-F 为基础的计数系统。
  • 进位:某一位达到基数时,进位到前一位并加 1。
  • 借位:某一位借位时,向前一位借 1。

转换方法

十进制转二进制

将十进制数不断除以 2,直到商为 0,然后反向取余,即可得到二进制数。

public static string DecimalToBinary(int decimalNum)
{
    string binaryStr = "";
    while(decimalNum > 0)
    {
        binaryStr = (decimalNum % 2) + binaryStr;
        decimalNum /= 2;
    }
    return binaryStr;
}

例如,将十进制数 10 转换为二进制数的过程如下:

  10 / 2 = 5 余 0
   5 / 2 = 2 余 1
   2 / 2 = 1 余 0
   1 / 2 = 0 余 1

所以,十进制数 10 转换为二进制数为 1010。

二进制转十进制

将二进制数从右到左依次乘以 2 的幂,幂的值从 0 开始递增,每次递增 1。将所有乘积相加,即可得到十进制数。

public static int BinaryToDecimal(string binaryStr)
{
    int decimalNum = 0;
    for(int i = binaryStr.Length - 1, j = 0; i >= 0; i--, j++)
    {
        if(binaryStr[i] == '1')
        {
            decimalNum += (int)Math.Pow(2, j);
        }
    }
    return decimalNum;
}

例如,将二进制数 1010 转换为十进制数的过程如下:

  1 * 2^3 = 8
  0 * 2^2 = 0
  1 * 2^1 = 2
  0 * 2^0 = 0

所以,二进制数 1010 转换为十进制数为 10。

十进制转十六进制

将十进制数不断除以 16,直到商为 0,然后反向取余。对于余数为 10-15 的情况,用 A-F 表示。

public static string DecimalToHex(int decimalNum)
{
    string hexStr = "";
    while(decimalNum > 0)
    {
        int remainder = decimalNum % 16;
        if(remainder >= 10)
        {
            hexStr = (char)('A' + remainder - 10) + hexStr;
        }
        else
        {
            hexStr = remainder + hexStr;
        }
        decimalNum /= 16;
    }
    return hexStr;
}

例如,将十进制数 255 转换为十六进制数的过程如下:

  255 / 16 = 15 余 15(F)
   15 / 16 = 0 余 15(F)

所以,十进制数 255 转换为十六进制数为 FF。

十六进制转十进制

将十六进制数从右到左依次乘以 16 的幂,幂的值从 0 开始递增,每次递增 1。对于 A-F,可以依次用 10-15 表示。将所有乘积相加,即可得到十进制数。

public static int HexToDecimal(string hexStr)
{
    int decimalNum = 0;
    for(int i = hexStr.Length - 1, j = 0; i >= 0; i--, j++)
    {
        int num = hexStr[i] >= 'A' && hexStr[i] <= 'F'
                ? hexStr[i] - 'A' + 10
                : int.Parse(hexStr[i].ToString());
        decimalNum += num * (int)Math.Pow(16, j);
    }
    return decimalNum;
}

例如,将十六进制数 FF 转换为十进制数的过程如下:

  F * 16^0 = 15
  F * 16^1 = 240

所以,十六进制数 FF 转换为十进制数为 255。

示例说明

示例一

在 C# 中,我们可以使用 Convert.ToString 方法将十进制数转换为二进制数,使用 Convert.ToInt32 方法将二进制数转换为十进制数。例如:

int decimalNum = 50;
string binaryStr = Convert.ToString(decimalNum, 2);
int newDecimalNum = Convert.ToInt32(binaryStr, 2);
Console.WriteLine($"十进制数 {decimalNum} 对应的二进制数为 {binaryStr}");
Console.WriteLine($"二进制数 {binaryStr} 对应的十进制数为 {newDecimalNum}");

输出结果为:

十进制数 50 对应的二进制数为 110010
二进制数 110010 对应的十进制数为 50

示例二

在 C# 中,我们可以使用 int.Parse 方法将十六进制字符串转换为十进制数,使用 Convert.ToString 方法将十进制数转换为十六进制字符串。例如:

int decimalNum = 255;
string hexStr = Convert.ToString(decimalNum, 16).ToUpper();
int newDecimalNum = int.Parse(hexStr, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine($"十进制数 {decimalNum} 对应的十六进制数为 {hexStr}");
Console.WriteLine($"十六进制数 {hexStr} 对应的十进制数为 {newDecimalNum}");

输出结果为:

十进制数 255 对应的十六进制数为 FF
十六进制数 FF 对应的十进制数为 255

以上就是 C# 进制转换的实现攻略,希望能够对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 进制转换的实现(二进制、十六进制、十进制互转) - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • ASP.NET MVC使用Boostrap实现产品展示、查询、排序、分页

    以下是在ASP.NET MVC中使用Bootstrap实现产品展示、查询、排序和分页的完整攻略: 步骤1:创建MVC项目 在Visual Studio中创建一个新的ASP.NET MVC项目。 步骤2:添加Bootstrap 在中添加Bootstrap框架。可以通过NuGet包管理器来安装Bootstrap。 步骤3:创建产品模型 在Models文件夹中创建…

    C# 2023年5月12日
    00
  • C#中载入界面的常用方法

    下面是关于C#中载入界面的常用方法的完整攻略。 1. 常用的C#界面加载方法 1.1 使用BackgroundWorker控件 BackgroundWorker是在C#中实现多线程的一种方式。通过使用多线程,可以在加载大量数据或执行耗时操作的过程中,保持UI线程的响应性能够更好,同时在后台线程中完成工作。 下面是使用BackgroundWorker控件的示例…

    C# 2023年5月31日
    00
  • C#使用throw和throw ex抛出异常的区别介绍

    让我们来详细讲解“C#使用throw和throw ex抛出异常的区别介绍”。 概述 在C#中,当程序出现错误时,我们可以使用异常来标识错误并进行处理。C#中有两种方式来抛出异常:throw和throw ex。它们之间有什么不同呢?在本篇攻略中,我们将对它们的区别进行介绍。 throw throw关键字可以用来抛出一个异常。当使用throw抛出异常时,它会保留…

    C# 2023年6月6日
    00
  • c#接口使用示例分享

    下面是详细讲解“c#接口使用示例分享”的完整攻略,包含以下几个部分: 1. 接口的介绍 在面向对象编程中,接口是一种重要的概念。接口定义了一个类应该具备的方法或属性,但并不实现这些方法或属性的具体逻辑。相反,这些方法或属性的实现需要由实现了接口的类来完成。这使得接口能够在不知道具体实现的情况下对代码进行抽象和规范。在C#中,接口通常被定义为使用 interf…

    C# 2023年6月1日
    00
  • C# Math.Round()函数问题

    下面是关于C# Math.Round()函数问题的完整攻略。 问题描述 在使用C#编程时,我们经常需要进行数字的四舍五入操作。C#提供了Math.Round()函数来实现这个功能,但是在使用的过程中可能会出现一些问题。 函数定义 Math.Round()函数的定义如下: public static double Round(double value, Mid…

    C# 2023年6月8日
    00
  • Unity实现汽车前后轮倒车轨迹计算

    Unity实现汽车前后轮倒车轨迹计算攻略 在制作汽车驾驶、停车等游戏时,经常需要计算汽车倒车轨迹。本文介绍如何使用Unity实现汽车倒车轨迹计算的完整攻略。 步骤一:创建汽车模型 首先,需要创建一辆汽车模型,包括车身、车轮等组成部分。可以使用Unity自带的模型,也可以自行创建或引入其他模型。 步骤二:设置车轮转动 将车轮设置为可以旋转,可以通过Animat…

    C# 2023年6月3日
    00
  • 浅析C#静态类,静态构造函数,静态变量

    C# 静态类,静态构造函数,静态变量 静态类 在C#中,静态类是一种只包含静态成员的类。不能被实例化,也不能被继承。常用于定义全局函数或者全局变量。 定义方式: static class MyStaticClass { // 静态成员 public static void MyStaticMethod() { Console.WriteLine("…

    C# 2023年6月8日
    00
  • C#中获取文件大小问题

    C#中获取文件大小是一项比较基础的操作,可以通过 System.IO 命名空间下的 FileInfo 类来实现。下面是具体的操作步骤: 引入命名空间 首先,需要在代码文件中引入 System.IO 命名空间,可以使用以下代码: using System.IO; 实例化 FileInfo 对象 在 FileInfo 类中,有一个 Length 属性可以获取文件…

    C# 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部