C# Stream转Byte数组

//获得当前文件目录
string rootPath = Directory.GetCurrentDirectory();
string path = rootPath + "Your File Path";
FileStream stream = new FileStream(path, FileMode.Open);
//Position应该被重置为0,否则读取的时候会从最后开始读,读不出来┭┮﹏┭┮
stream.Position = 0;
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
byte[] bytes = ms.ToArray();
string rootPath = Directory.GetCurrentDirectory();
string path = rootPath + "Your File Path";
FileStream stream = new FileStream(path, FileMode.Open);
stream.Position = 0;
byte[] bytes = new byte[stream.Length];
using (MemoryStream ms = new MemoryStream())
{
    int read;
    while ((read = stream.Read(bytes, 0, bytes.Length)) > 0)
    {
        ms.Write(bytes, 0, read);
    }
    bytes = ms.ToArray();
}
<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#的类型名称,如string和byte[],而不是.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); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值