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

yizhihongxing

下面我将为大家详细讲解 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日

相关文章

  • webpack-dev-server核心概念案例详解

    webpack-dev-server核心概念案例详解 webpack-dev-server是一个基于Node.js的开发服务器,它可以实时重新加载页面,提高开发效率。本文将详细讲解webpack-dev-server的核心概念,并提供两个示例。 1. 安装webpack-dev-server 在使用webpack-dev-server之前,需要先安装它。可以…

    C# 2023年5月15日
    00
  • C# Linq的SkipWhile()方法 – 跳过序列中的元素,直到某个元素不满足

    下面是关于 C# Linq 的 SkipWhile() 的完整攻略。 SkipWhile() 简介 SkipWhile() 方法是 C# Linq 中的一种用来过滤序列的方法,其参数为一个带有一个参数和一个返回bool类型的委托,该委托定义了决定跳过哪些元素的方法。SkipWhile() 方法会跳过序列中开头符合条件的元素,直到遇到第一个不符合条件的元素为止…

    C# 2023年4月19日
    00
  • 记一次 .NET 某外贸ERP 内存暴涨分析

    一:背景 1. 讲故事 上周有位朋友找到我,说他的 API 被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧。 二:WinDbg 分析 1. 到底是哪里的泄露 这也是我一直在训练营灌输的理念,一定要知道是哪一边的暴涨,否则很可能就南辕北辙了,使用 !address -summary 和 !…

    C# 2023年4月27日
    00
  • ASP.NET MVC SSO单点登录设计与实现代码

    ASP.NET MVC SSO单点登录(Single Sign-On)是一种在多个应用程序中使用相同的身份验证凭据登录的方案。在这种方案中,用户只需一次登录,即可轻松访问所有相关的应用程序。 下面是ASP.NET MVC SSO单点登录设计与实现的完整攻略: 1. 认识 SSO 单点登录 单点登录是一种用户只需登录一个系统就可以实现多系统认证的场景。SSO …

    C# 2023年5月31日
    00
  • Silverlight融合ajax实现前后台数据交互

    Silverlight融合ajax实现前后台数据交互 Silverlight是一种基于.NET Framework的浏览器插件,可以用于创建丰富的互联网应用程序。在Silverlight应用程序中,可以使用ajax技术来实现前后台数据交互。本文将提供详细的“Silverlight融合ajax实现前后台数据交互”的完整攻略,包括如何使用ajax技术来实现前后台…

    C# 2023年5月15日
    00
  • 浅析SQL Server中包含事务的存储过程

    浅析SQL Server中包含事务的存储过程 什么是存储过程 存储过程是一组预先编写的可重复使用的SQL语句集合,它们被保存在数据库中,可以通过一个单独的指令调用它们并执行。存储过程可以实现更加复杂的操作,为数据库提供更好的封装性和安全性。 什么是事务 事务是指对数据库进行一组数据操作的过程,这些操作要么全部成功,要么全部失败,不存在只执行了其中一部分操作的…

    C# 2023年5月31日
    00
  • C#中list用法实例

    下面是关于C#中List用法的完整攻略。 什么是List 在C#语言中,List是指一个元素列表,也称为动态数组或无限长数组。它允许您动态添加或删除元素,以及在列表中访问特定元素。 如何创建List 我们可以使用List的构造函数来创建List对象。我们可以选择在构造函数中传递有关该List对象的信息,例如其初始容量: // 创建一个新的List对象 Lis…

    C# 2023年5月31日
    00
  • 部署.NET6项目到IIS

    部署.NET6项目到IIS .NET 6是一个跨平台的开源框架,它可以帮助我们构建高性能的Web应用程序。IIS是一个Web服务器,它可以帮助我们部署和托管Web应用程序。本攻略将详细介绍如何将.NET 6项目部署到IIS。 环境要求 在进行.NET 6项目部署到IIS时,我们需要满足以下环境要求: .NET 6 SDK IIS 创建.NET 6项目 我们可…

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