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 2.0中操作数据之五十八:在程序启动阶段缓存数据

    标题 在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据 简介ASP.NET 2.0提供了一种在程序启动阶段缓存数据的方式,以提高数据访问效率。本文将详细讲解如何在ASP.NET 2.0中使用程序启动阶段缓存数据。 步骤1. 在Global.asax文件的Application_Start事件中添加代码以缓存数据 void Applicati…

    C# 2023年6月3日
    00
  • C# params可变参数的使用注意详析

    C# params 可变参数的使用注意详析 什么是 params? C# 中的 params 关键字可以让我们定义一个可变长度参数列表。使用 params 关键字的方法可以接受零个或多个参数,参数在方法内部被视为数组,可以像普通数组一样进行访问。 使用 params 关键字定义的参数必须是方法的最后一个参数,而且一个方法只能拥有一个 params 关键字定义…

    C# 2023年5月15日
    00
  • c#批量抓取免费代理并且验证有效性的实战教程

    C#批量抓取免费代理并且验证有效性的实战教程 代理服务器可以帮助我们解决一些访问问题,如境外IP访问等。但是,免费代理服务器资源不稳定,稳定的需要付费购买。本教程主要介绍如何使用C#语言进行批量抓取免费代理,并且验证代理有效性。 1. 获取免费代理网站 在开始之前,需要选择一个可靠的免费代理网站。以西刺代理网站为例,网址为:https://www.xicid…

    C# 2023年5月15日
    00
  • C#多线程之Thread中Thread.IsAlive属性用法分析

    当我们使用C#编写多线程程序时,了解Thread.IsAlive属性是非常重要的。 1.什么是Thread.IsAlive属性 Thread.IsAlive属性指示线程是否正在运行,或者已经完成了运行过程。当线程的执行流程终止时,IsAlive属性将返回false。IsAlive属性是只读的。 2.使用示例1 在这个示例中,我们将使用Thread.IsAli…

    C# 2023年5月15日
    00
  • ASP.NET常用代码

    下面我会详细讲解 ASP.NET 常用代码的攻略,包含两条示例。 1. 常用的 ASP.NET 代码 1.1 控件操作 在 ASP.NET 中,我们可以通过控件来操作网页中的元素,如文本框、按钮等等。以下是一些常见的控件操作代码: 在代码中获取控件: TextBox txtBox = (TextBox)FindControl("txtName&qu…

    C# 2023年5月15日
    00
  • Unity制作游戏自定义按键详解

    Unity制作游戏自定义按键详解 在 Unity 中,通过自定义按键来更好地控制游戏角色或执行一些特殊动作是很常见的需求。在这篇文章中,我们将详细讲解如何使用 Unity 的 Input Manager 来自定义按键。 1. Input Manager 输入管理器(Input Manager)是 Unity 中一个非常常用的工具,它可以让我们很方便地管理游戏…

    C# 2023年5月15日
    00
  • c# 如何实现自动更新程序

    针对C#如何实现自动更新程序,一般有两种实现方式,分别是: 1.使用ClickOnce部署 ClickOnce是微软公司提供的一种快速、简单的部署技术,可以帮助开发人员轻松地完成应用程序的自动更新。其主要优点是使用简便、稳定性高、和Windows操作系统深度耦合。 其中实现步骤如下: 首先,我们需要在Visual Studio中针对该应用程序进行发布设置,定…

    C# 2023年5月15日
    00
  • PC 端微信扫码注册和登录实例

    下面我将为大家详细讲解“PC 端微信扫码注册和登录实例”的完整攻略。 准备工作 首先,你需要在自己的网站中添加微信扫码登录模块,可以使用第三方登录插件,例如“社会化登录”插件。在使用该插件时,需要先获取自己的应用 ID 和应用密钥等信息。 页面设计 添加微信登录模块后,需要在网站中添加注册和登录页面。可以使用 HTML 和 CSS 设计全新的页面,也可以使用…

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