c# 帮我判断传入的字符串按照中文,小写英文,大写英文,特殊符号,数字来返回字节
时间: 2024-12-22 14:21:59 浏览: 12
在 C# 中,判断并转换一个字符串到字节数组,需要考虑到字符串中包含的不同字符类型(如中文、英文、数字等)。这里有一个基本的例子,会根据每种类型的字符长度将其转换为字节数组:
```csharp
using System;
using System.Text;
public byte[] StringToBytes(string input)
{
// 初始化空字节数组
byte[] bytes = new byte[0];
// 遍历输入字符串
foreach (char c in input)
{
// 检查字符类型
switch (char.GetUnicodeCategory(c))
{
case UnicodeCategory.UppercaseLetter:
case UnicodeCategory.LowercaseLetter:
// 英文字符,占用1个字节
bytes = Array.Resize(ref bytes, bytes.Length + 1);
bytes[bytes.Length - 1] = (byte)c;
break;
case UnicodeCategory.DecimalNumber:
case UnicodeCategory.LetterNumber:
case UnicodeCategory.OtherNumber:
// 数字字符,也占用1个字节
bytes = Array.Resize(ref bytes, bytes.Length + 1);
bytes[bytes.Length - 1] = (byte)c;
break;
case UnicodeCategory.TitleCaseLetter:
case UnicodeCategory.ModifierLetter:
case UnicodeCategory.OtherLetter:
// 其他英文字符,例如希腊字母、斯拉夫字母等,也是1个字节
bytes = Array.Resize(ref bytes, bytes.Length + 1);
bytes[bytes.Length - 1] = (byte)c;
break;
// 对于中文字符,占用2个连续的字节
case UnicodeCategory.Numeric:
// 这里假设UTF-8编码,一个汉字编码占用2个字节
// 实际操作中需要先将字符转换为UTF-8字节数组
byte[] utf8Char = Encoding.UTF8.GetBytes(new string(c));
bytes = Array.Resize(ref bytes, bytes.Length + utf8Char.Length);
Buffer.BlockCopy(utf8Char, 0, bytes, bytes.Length - utf8Char.Length, utf8Char.Length);
break;
default:
// 特殊字符(如标点符号),也占用1个字节
bytes = Array.Resize(ref bytes, bytes.Length + 1);
bytes[bytes.Length - 1] = (byte)c;
break;
}
}
return bytes;
}
// 示例使用
string testInput = "Hello, 世界! 123 !@#$%";
byte[] result = StringToBytes(testInput);
```
注意:上面的代码并没有完全覆盖所有情况,例如,对于非ASCII字符,需要考虑其实际的UTF-8编码长度。此外,这只是一个简单的示例,实际应用中可能还需要处理异常和错误处理。
阅读全文