C#实现字符、ASCII码和数字之间进行转换的方法大全

 更新时间:2025年10月28日 09:54:34   作者:code_shenbing  
ASCII(美国信息交换标准代码)是计算机科学中最常用的字符编码标准之一,在C#开发中,经常需要在字符、ASCII码和数字之间进行转换,本文将详细介绍C#中实现这些转换的各种方法,需要的朋友可以参考下

ASCII码基础

ASCII码使用7位二进制数(0-127)来表示128个字符,包括:

  • 控制字符(0-31和127)
  • 数字字符(48-57)
  • 大写字母(65-90)
  • 小写字母(97-122)
  • 标点符号和特殊字符

基本转换方法

1. 字符与ASCII码的相互转换

using System;
 
class AsciiConverter
{
    // 字符转换为ASCII码
    public static int CharToAscii(char character)
    {
        return (int)character;
    }
    
    // ASCII码转换为字符
    public static char AsciiToChar(int asciiCode)
    {
        // 确保ASCII码在有效范围内
        if (asciiCode >= 0 && asciiCode <= 127)
        {
            return (char)asciiCode;
        }
        else
        {
            throw new ArgumentOutOfRangeException("ASCII码必须在0-127范围内");
        }
    }
    
    // 使用示例
    public static void DemonstrateBasicConversion()
    {
        // 字符转ASCII
        char letterA = 'A';
        int asciiA = CharToAscii(letterA);
        Console.WriteLine($"字符 '{letterA}' 的ASCII码是: {asciiA}");
        
        // ASCII转字符
        int asciiCode = 66;
        char character = AsciiToChar(asciiCode);
        Console.WriteLine($"ASCII码 {asciiCode} 对应的字符是: '{character}'");
        
        // 数字字符的特殊处理
        char digitChar = '7';
        int digitAscii = CharToAscii(digitChar);
        Console.WriteLine($"数字字符 '{digitChar}' 的ASCII码是: {digitAscii}");
    }
}

2. 字符串与ASCII码数组的转换

public class StringAsciiConverter
{
    // 字符串转换为ASCII码数组
    public static int[] StringToAsciiArray(string text)
    {
        if (string.IsNullOrEmpty(text))
            return new int[0];
            
        int[] asciiArray = new int[text.Length];
        for (int i = 0; i < text.Length; i++)
        {
            asciiArray[i] = (int)text[i];
        }
        return asciiArray;
    }
    
    // ASCII码数组转换为字符串
    public static string AsciiArrayToString(int[] asciiArray)
    {
        if (asciiArray == null || asciiArray.Length == 0)
            return string.Empty;
            
        char[] charArray = new char[asciiArray.Length];
        for (int i = 0; i < asciiArray.Length; i++)
        {
            if (asciiArray[i] < 0 || asciiArray[i] > 127)
            {
                throw new ArgumentException($"无效的ASCII码: {asciiArray[i]}");
            }
            charArray[i] = (char)asciiArray[i];
        }
        return new string(charArray);
    }
    
    // 使用示例
    public static void DemonstrateStringConversion()
    {
        string text = "Hello, ASCII!";
        
        // 字符串转ASCII数组
        int[] asciiCodes = StringToAsciiArray(text);
        Console.WriteLine($"字符串: {text}");
        Console.WriteLine("ASCII码数组: " + string.Join(", ", asciiCodes));
        
        // ASCII数组转字符串
        string restoredText = AsciiArrayToString(asciiCodes);
        Console.WriteLine($"还原后的字符串: {restoredText}");
    }
}

数字字符与数值的转换

3. 数字字符与整数的转换

public class DigitConverter
{
    // 数字字符转换为整数值
    public static int CharToDigit(char digitChar)
    {
        if (char.IsDigit(digitChar))
        {
            // 方法1: 使用字符运算
            return digitChar - '0';
            
            // 方法2: 使用int.Parse
            // return int.Parse(digitChar.ToString());
        }
        else
        {
            throw new ArgumentException("输入的字符不是数字字符");
        }
    }
    
    // 整数转换为数字字符
    public static char DigitToChar(int digit)
    {
        if (digit >= 0 && digit <= 9)
        {
            // 方法1: 使用字符运算
            return (char)('0' + digit);
            
            // 方法2: 使用字符转换
            // return digit.ToString()[0];
        }
        else
        {
            throw new ArgumentOutOfRangeException("数字必须在0-9范围内");
        }
    }
    
    // 使用示例
    public static void DemonstrateDigitConversion()
    {
        // 数字字符转整数
        char fiveChar = '5';
        int fiveInt = CharToDigit(fiveChar);
        Console.WriteLine($"字符 '{fiveChar}' 转换为整数: {fiveInt}");
        Console.WriteLine($"类型: {fiveInt.GetType()}");
        
        // 整数转数字字符
        int nineInt = 9;
        char nineChar = DigitToChar(nineInt);
        Console.WriteLine($"整数 {nineInt} 转换为字符: '{nineChar}'");
        Console.WriteLine($"类型: {nineChar.GetType()}");
    }
}

高级转换应用

4. 十六进制表示与ASCII的转换

public class HexAsciiConverter
{
    // ASCII码转换为十六进制字符串
    public static string AsciiToHex(char character)
    {
        int asciiCode = (int)character;
        return asciiCode.ToString("X2"); // X2表示两位十六进制
    }
    
    // 十六进制字符串转换为ASCII字符
    public static char HexToAscii(string hexString)
    {
        if (hexString.Length != 2)
            throw new ArgumentException("十六进制字符串必须是2位");
            
        int asciiCode = Convert.ToInt32(hexString, 16);
        return (char)asciiCode;
    }
    
    // 使用示例
    public static void DemonstrateHexConversion()
    {
        char letter = 'Z';
        string hex = AsciiToHex(letter);
        Console.WriteLine($"字符 '{letter}' 的十六进制ASCII表示: {hex}");
        
        char restoredChar = HexToAscii(hex);
        Console.WriteLine($"十六进制 {hex} 还原为字符: '{restoredChar}'");
    }
}

5. 批量转换和数据处理

public class BatchAsciiConverter
{
    // 批量转换字符串为ASCII码列表
    public static List<int> ConvertStringToAsciiList(string text)
    {
        return text.Select(c => (int)c).ToList();
    }
    
    // 过滤非ASCII字符
    public static string FilterNonAsciiCharacters(string text)
    {
        return new string(text.Where(c => c <= 127).ToArray());
    }
    
    // 统计ASCII字符分布
    public static Dictionary<char, int> AnalyzeAsciiDistribution(string text)
    {
        var distribution = new Dictionary<char, int>();
        
        foreach (char c in text)
        {
            if (c <= 127) // 只统计ASCII字符
            {
                if (distribution.ContainsKey(c))
                {
                    distribution[c]++;
                }
                else
                {
                    distribution[c] = 1;
                }
            }
        }
        
        return distribution;
    }
    
    // 使用示例
    public static void DemonstrateBatchOperations()
    {
        string sampleText = "Hello, World! 123";
        
        // 批量转换
        List<int> asciiList = ConvertStringToAsciiList(sampleText);
        Console.WriteLine("ASCII码列表: " + string.Join(" ", asciiList));
        
        // 字符分布分析
        var distribution = AnalyzeAsciiDistribution(sampleText);
        Console.WriteLine("字符分布:");
        foreach (var pair in distribution.OrderBy(p => p.Key))
        {
            Console.WriteLine($"字符 '{(pair.Key == ' ' ? "空格" : pair.Key.ToString())}': 出现{pair.Value}次");
        }
    }
}

6. 实用工具类

public static class AsciiUtility
{
    // 判断字符是否为ASCII字符
    public static bool IsAscii(char c)
    {
        return c <= 127;
    }
    
    // 判断字符是否为数字字符
    public static bool IsAsciiDigit(char c)
    {
        return c >= '0' && c <= '9';
    }
    
    // 判断字符是否为字母
    public static bool IsAsciiLetter(char c)
    {
        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
    }
    
    // 判断字符是否为大写字母
    public static bool IsAsciiUpper(char c)
    {
        return c >= 'A' && c <= 'Z';
    }
    
    // 判断字符是否为小写字母
    public static bool IsAsciiLower(char c)
    {
        return c >= 'a' && c <= 'z';
    }
    
    // 转换为大写(仅对字母有效)
    public static char ToAsciiUpper(char c)
    {
        if (IsAsciiLower(c))
        {
            return (char)(c - 32); // 小写转大写:ASCII码减32
        }
        return c;
    }
    
    // 转换为小写(仅对字母有效)
    public static char ToAsciiLower(char c)
    {
        if (IsAsciiUpper(c))
        {
            return (char)(c + 32); // 大写转小写:ASCII码加32
        }
        return c;
    }
}

实际应用场景

7. 数据加密和解密示例

public class SimpleAsciiCipher
{
    // 简单的ASCII加密(凯撒密码变种)
    public static string Encrypt(string text, int shift)
    {
        char[] result = new char[text.Length];
        
        for (int i = 0; i < text.Length; i++)
        {
            if (AsciiUtility.IsAsciiLetter(text[i]))
            {
                char baseChar = AsciiUtility.IsAsciiUpper(text[i]) ? 'A' : 'a';
                result[i] = (char)(((text[i] - baseChar + shift) % 26) + baseChar);
            }
            else
            {
                result[i] = text[i];
            }
        }
        
        return new string(result);
    }
    
    // 解密
    public static string Decrypt(string encryptedText, int shift)
    {
        return Encrypt(encryptedText, 26 - (shift % 26)); // 反向移位
    }
    
    // 使用示例
    public static void DemonstrateEncryption()
    {
        string original = "Hello, World!";
        int shift = 3;
        
        string encrypted = Encrypt(original, shift);
        string decrypted = Decrypt(encrypted, shift);
        
        Console.WriteLine($"原文: {original}");
        Console.WriteLine($"加密后: {encrypted}");
        Console.WriteLine($"解密后: {decrypted}");
    }
}

性能优化建议

  • ​使用StringBuilder处理大量字符串操作​
  • ​避免在循环中频繁进行类型转换​
  • ​使用预计算的值代替重复计算​
  • ​考虑使用span和memory处理大文本​
// 高性能的ASCII处理示例
public static class HighPerformanceAscii
{
    public static unsafe int[] StringToAsciiFast(string text)
    {
        int[] result = new int[text.Length];
        fixed (char* pText = text)
        {
            for (int i = 0; i < text.Length; i++)
            {
                result[i] = pText[i];
            }
        }
        return result;
    }
}

C#提供了多种灵活的方法来实现ASCII码与数字之间的转换。关键点包括:

  1. ​基本转换​​:使用强制类型转换(int)char(char)int
  2. ​数字字符处理​​:注意数字字符'0'-'9'的ASCII码是48-57
  3. ​边界检查​​:始终验证ASCII码的有效范围(0-127)
  4. ​批量处理​​:使用LINQ和数组操作提高效率
  5. ​实际应用​​:这些转换在加密、数据处理、协议通信等领域非常有用

掌握这些转换技巧可以帮助开发者更好地处理文本数据,理解字符编码的本质,并在需要时实现高效的字符串处理算法。

以上就是C#实现字符、ASCII码和数字之间进行转换的方法大全的详细内容,更多关于C#字符、ASCII码与数字转换的资料请关注脚本之家其它相关文章!

相关文章

  • C# 格式化字符串的实现代码

    C# 格式化字符串的实现代码

    这篇文章主要介绍了C# 格式化字符串的实现代码,需要的朋友可以参考下
    2016-11-11
  • 解析C#编程的通用结构和程序书写格式规范

    解析C#编程的通用结构和程序书写格式规范

    这篇文章主要介绍了C#编程的通用结构和程序书写格式规范,这里我们根据C#语言的开发方微软给出的约定来作为编写样式参照,需要的朋友可以参考下
    2016-01-01
  • python实现AutoResetEvent类的阻塞模式方法解析

    python实现AutoResetEvent类的阻塞模式方法解析

    AutoResetEvent :当某个线程执行到WaitOne()方法时,该线程则会处于阻塞模式,当被调用了Set()方法,阻塞的线程则会继续向下执行,其状态立即被自动设置为阻塞模式
    2012-11-11
  • 如何搭建新的WPF项目框架

    如何搭建新的WPF项目框架

    这篇文章主要介绍了如何搭建新的WPF项目框架,在项目开发中比较常见的开发模式就是MVVM模式,使用MVVM框架开发好处:1、框架较轻,2、学习成本低、3、适用大多数中小型项目,4、相对于微软的prism框架更容易上手,需要的朋友可以参考下
    2015-07-07
  • C#开发WinForm之DataGridView开发详解

    C#开发WinForm之DataGridView开发详解

    这篇文章主要介绍了C#开发WinForm之DataGridView开发详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C# LiteDB处理时间序列数据的高性能解决方案

    C# LiteDB处理时间序列数据的高性能解决方案

    LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数据的高性能解决方案,希望对大家有所帮助
    2025-08-08
  • Unity实现俄罗斯方块(一)

    Unity实现俄罗斯方块(一)

    这篇文章主要介绍了Unity实现俄罗斯方块的第一部分代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Unity中的PostProcessScene实用案例深入解析

    Unity中的PostProcessScene实用案例深入解析

    这篇文章主要为大家介绍了Unity中的PostProcessScene实用案例深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Unity使用ScrollRect制作翻页

    Unity使用ScrollRect制作翻页

    这篇文章主要为大家详细介绍了Unity使用ScrollRect制作翻页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • c#扩展datatable转json示例

    c#扩展datatable转json示例

    这篇文章主要介绍了c#扩展datatable转json示例,需要的朋友可以参考下
    2014-05-05

最新评论