C#實現(xiàn)字符、ASCII碼和數(shù)字之間進行轉換的方法大全
更新時間:2025年10月28日 09:54:34 作者:code_shenbing
ASCII(美國信息交換標準代碼)是計算機科學中最常用的字符編碼標準之一,在C#開發(fā)中,經常需要在字符、ASCII碼和數(shù)字之間進行轉換,本文將詳細介紹C#中實現(xiàn)這些轉換的各種方法,需要的朋友可以參考下
ASCII碼基礎
ASCII碼使用7位二進制數(shù)(0-127)來表示128個字符,包括:
- 控制字符(0-31和127)
- 數(shù)字字符(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}'");
// 數(shù)字字符的特殊處理
char digitChar = '7';
int digitAscii = CharToAscii(digitChar);
Console.WriteLine($"數(shù)字字符 '{digitChar}' 的ASCII碼是: {digitAscii}");
}
}2. 字符串與ASCII碼數(shù)組的轉換
public class StringAsciiConverter
{
// 字符串轉換為ASCII碼數(shù)組
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碼數(shù)組轉換為字符串
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數(shù)組
int[] asciiCodes = StringToAsciiArray(text);
Console.WriteLine($"字符串: {text}");
Console.WriteLine("ASCII碼數(shù)組: " + string.Join(", ", asciiCodes));
// ASCII數(shù)組轉字符串
string restoredText = AsciiArrayToString(asciiCodes);
Console.WriteLine($"還原后的字符串: {restoredText}");
}
}數(shù)字字符與數(shù)值的轉換
3. 數(shù)字字符與整數(shù)的轉換
public class DigitConverter
{
// 數(shù)字字符轉換為整數(shù)值
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("輸入的字符不是數(shù)字字符");
}
}
// 整數(shù)轉換為數(shù)字字符
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("數(shù)字必須在0-9范圍內");
}
}
// 使用示例
public static void DemonstrateDigitConversion()
{
// 數(shù)字字符轉整數(shù)
char fiveChar = '5';
int fiveInt = CharToDigit(fiveChar);
Console.WriteLine($"字符 '{fiveChar}' 轉換為整數(shù): {fiveInt}");
Console.WriteLine($"類型: {fiveInt.GetType()}");
// 整數(shù)轉數(shù)字字符
int nineInt = 9;
char nineChar = DigitToChar(nineInt);
Console.WriteLine($"整數(shù) {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. 批量轉換和數(shù)據處理
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());
}
// 統(tǒng)計ASCII字符分布
public static Dictionary<char, int> AnalyzeAsciiDistribution(string text)
{
var distribution = new Dictionary<char, int>();
foreach (char c in text)
{
if (c <= 127) // 只統(tǒng)計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())}': 出現(xiàn){pair.Value}次");
}
}
}6. 實用工具類
public static class AsciiUtility
{
// 判斷字符是否為ASCII字符
public static bool IsAscii(char c)
{
return c <= 127;
}
// 判斷字符是否為數(shù)字字符
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. 數(shù)據加密和解密示例
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}");
}
}性能優(yōu)化建議
- ??使用StringBuilder處理大量字符串操作??
- ??避免在循環(huán)中頻繁進行類型轉換??
- ??使用預計算的值代替重復計算??
- ??考慮使用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#提供了多種靈活的方法來實現(xiàn)ASCII碼與數(shù)字之間的轉換。關鍵點包括:
- ??基本轉換??:使用強制類型轉換
(int)char和(char)int - ??數(shù)字字符處理??:注意數(shù)字字符'0'-'9'的ASCII碼是48-57
- ??邊界檢查??:始終驗證ASCII碼的有效范圍(0-127)
- ??批量處理??:使用LINQ和數(shù)組操作提高效率
- ??實際應用??:這些轉換在加密、數(shù)據處理、協(xié)議通信等領域非常有用
掌握這些轉換技巧可以幫助開發(fā)者更好地處理文本數(shù)據,理解字符編碼的本質,并在需要時實現(xiàn)高效的字符串處理算法。
以上就是C#實現(xiàn)字符、ASCII碼和數(shù)字之間進行轉換的方法大全的詳細內容,更多關于C#字符、ASCII碼與數(shù)字轉換的資料請關注腳本之家其它相關文章!
相關文章
C#線性漸變畫刷LinearGradientBrush用法實例
這篇文章主要介紹了C#線性漸變畫刷LinearGradientBrush用法,實例分析了線性漸變畫刷LinearGradientBrush的相關使用技巧,需要的朋友可以參考下2015-06-06

