将Byte数组转化为String-.NET教程,C#语言

fcl得非常多方法的返回值都是包含字符的byte数组而不是返回一个string,这样的方法包含在如下的类中:

? system.net.sockets.socket.receive

? system.net.sockets.socket.receivefrom

? system.net.sockets.socket.beginreceive

? system.net.sockets.socket.beginreceivefrom

? system.net.sockets.networkstream.read

? system.net.sockets.networkstream.beginread

? system.io.binaryreader.read

? system.io.binaryreader.readbytes

? system.io.filestream.read

? system.io.filestream.beginread

? system.io.memorystream // constructor

? system.io.memorystream.read

? system.io.memorystream.beginread

? system.security.cryptography.cryptostream.read

? system.security.cryptography.cryptostream.beginread

? system.diagnostics.eventlogentry.data

由这些方法返回的byte数组中包含的通常是以ascii编码或是unicode编码的字符,非常多时候,我们可能需要将这样的byte数组转换为一个string。

解决方案

将一个包含ascii编码字符的byte数组转化为一个完整的string,能使用如下的方法:

using system;
using system.text;

public static string fromasciibytearray(byte[] characters)
{
asciiencoding encoding = new asciiencoding( );
string constructedstring = encoding.getstring(characters);
return (constructedstring);
}


将一个包含unicode编码字符的byte数组转化为一个完整的string,能使用如下的方法:

public static string fromunicodebytearray(byte[] characters)
{
unicodeencoding encoding = new unicodeencoding( );
string constructedstring = encoding.getstring(characters);
return (constructedstring);
}




讨论

asciiencoding类的getstring方法能将byte数组中的7-bitsascii字符转换为一个string;所有大于127的值将被转化为两个字符。在system.text命名空间中你能找到asciiencoding类,查找该类的getstring函数你还能发现这个函数有多种重载方式以支持一些附加的参数。这个方法的重载版本还能将一个byte数组中的一部分字符转化为string。

将byte数组转化为string的getstring方法能在system.text命名空间的unicodeencoding类中找到,该方法将包含16-bitsunicode字符的byte数组转化为string。同asciiencoding类的getstring方法相同,该方法也包含一个将byte数组中的特定部分转化为string的重载版本

转载于:https://www.cnblogs.com/Fly-sky/archive/2009/04/30/1446943.html

<think>好的,用户的问题是关于如何在C#中将字符串转换为字节数组的例子。我需要先回忆相关的知识,然后结合提供的引用内容来回答。 首先,用户提供的引用中有几个相关的部分。引用[1]提到了FromBase64String方法,不过这可能不是用户需要的,因为那是从Base64字符串转换,而用户可能指的是普通的字符串转字节数组。引用[2]中提到了使用Encoding.ASCII.GetString(bytes),这是将字节数组转为字符串,反过来可能需要GetBytes方法。引用[3]是关于流转换为字节数组,可能不直接相关,但里面提到了Encoding.ASCII的使用,可以关联到编码方式。引用[4]提到C#类型和.NET类型的映射,可能涉及到字符串和字节数组处理时的编码问题。 用户需要的是将字符串转为字节数组的例子,所以正确的做法是使用Encoding类的方法,比如Encoding.UTF8.GetBytes()。不同的编码方式(如UTF-8、ASCII、Unicode)会产生不同的字节数组。需要提醒用户注意编码的选择,因为不同的编码会影响结果。例如,中文字符在ASCII编码下可能会丢失信息,需要用UTF-8等支持更广字符集的编码。 根据引用[2]中的例子,用户将字节数组转为字符串用了Encoding.ASCII.GetString,那么反过来就是使用GetBytes方法。所以正确的示例应该是使用类似的方法,比如: byte[] bytes = Encoding.UTF8.GetBytes("字符串"); 同时,需要指出不同编码方式的差异,并提供示例代码。可能还需要提到转换回字符串的方法,如引用[2]中的内容,但用户主要需要的是转字节数组,所以重点放在GetBytes上。 检查是否有其他需要注意的地方,比如异常处理,但用户只需要一个例子,可能不需要太复杂的内容。此外,引用[3]中的代码虽然关于流,但里面也使用了Read方法,这可能不适用于当前问题,可以忽略。 总结回答步骤: 1. 介绍使用Encoding类,选择适当的编码方式。 2. 示例代码展示不同编码的转换,如UTF8、ASCII、Unicode。 3. 强调编码选择的重要性,特别是处理非ASCII字符时。 4. 提供将字节数组转回字符串的方法,以完整性,如引用[2]中的例子。 5. 确保代码示例正确,语法无误,符合C#规范。 现在需要组织语言,用中文清晰说明,并引用相关参考资料。根据引用内容,特别是引用[2]和引用[4],确保提到使用C#的类型名称,如stringbyte[],而不是.NET的System.String等,尽管在技术上是别名,但建议使用C#的命名。 最后生成相关问题,可能涉及不同编码的区别、处理异常情况、转换时的性能考虑等。</think>在C#中将字符串转换为字节数组的方法主要涉及字符编码处理。以下是具体实现步骤及示例: ### 一、核心转换方法 使用`System.Text.Encoding`类中的编码器方法: ```csharp // 字符串转UTF-8字节数组 string text = "Hello, 世界"; byte[] utf8Bytes = Encoding.UTF8.GetBytes(text); // 字符串转ASCII字节数组(注意中文会丢失) byte[] asciiBytes = Encoding.ASCII.GetBytes("ASCII only"); ``` ### 二、编码选择要点 1. **UTF-8编码**(推荐) - 支持全Unicode字符集 - 中文字符会编码为3-4个字节 - 示例:`"世界"`→`[228, 184, 150, 231, 149, 140]` 2. **ASCII编码** - 仅支持0-127字符 - 超范围字符将被替换为`?`(ASCII 63) 3. **Unicode编码** - 每个字符占2字节 - 示例:`"A"`→`[65, 0]` ### 三、逆向转换方法 通过相同编码器还原数据: ```csharp string decodedText = Encoding.UTF8.GetString(utf8Bytes); // 引用[2] ``` ### 四、特殊场景处理 1. **Base64转换**(引用[1]) ```csharp byte[] fromBase64 = Convert.FromBase64String("SGVsbG8="); ``` 2. **流处理**(引用[3]) 虽然问题不直接相关,但需注意流读取时需保证`Position`在起点: ```csharp stream.Seek(0, SeekOrigin.Begin); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值