将 C# 字符串 string 和内存流 MemoryStream 以及比特数组 byte[] 之间相互转换,需要使用 System.Text.Encoding 类和 System.IO 命名空间中提供的类型。下面是转换的过程:
1. 从字符串 string 转换为比特数组 byte[]
一般情况下,我们可以使用字符串的编码格式将其转换为比特数组。
// 选择一种编码格式
Encoding utf8 = Encoding.UTF8;
Encoding gbk = Encoding.GetEncoding("gbk");
// 将字符串转换为比特数组
byte[] bytes = utf8.GetBytes("Hello world!"); // 使用 UTF-8 编码格式输出 [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33]
在上述代码中,我们先选择了一种编码格式(UTF-8 和 GBK),然后使用 Encoding.GetBytes()
函数将字符串转换为比特数组。
2. 从比特数组 byte[] 转换为字符串 string
同样的,我们可以使用特定的编码格式将比特数组转换为字符串。
// 将比特数组转换为字符串
string str1 = utf8.GetString(bytes); // 使用 UTF-8 编码格式输出 "Hello world!"
string str2 = gbk.GetString(bytes); // 使用 GBK 编码格式输出 "Hello world!"
在上述代码中,我们将比特数组使用 Encoding.GetString()
函数转换为字符串,需要注意的是,要使用正确的编码格式。
3. 从字符串 string 转换为内存流 MemoryStream
将字符串转换为内存流,我们可以先将字符串转换为比特数组,然后将比特数组通过构造函数传入 MemoryStream 中。
// 将字符串转换为内存流
MemoryStream ms1 = new MemoryStream(utf8.GetBytes("Hello world!")); // 使用 UTF-8 编码格式
MemoryStream ms2 = new MemoryStream(gbk.GetBytes("Hello world!")); // 使用 GBK 编码格式
在上述代码中,我们使用 MemoryStream
的构造函数和 Encoding.GetBytes()
函数将字符串转换为比特数组,进而通过 MemoryStream
中的构造函数将比特数组转换为内存流。
4. 从内存流 MemoryStream 转换为比特数组 byte[]
从内存流到比特数组的转换,我们需要调用 MemoryStream.ToArray()
函数。
// 将内存流转换为比特数组
byte[] bytes1 = ms1.ToArray();
byte[] bytes2 = ms2.ToArray();
在上述代码中,我们使用 MemoryStream.ToArray()
函数将内存流转换为比特数组。
示例说明
示例1:将字符串写入内存流,并将内存流转换为比特数组
using System;
using System.IO;
using System.Text;
class Program
{
static void Main(string[] args)
{
Encoding utf8 = Encoding.UTF8;
// 将字符串写入内存流
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, utf8);
sw.Write("Hello world!");
sw.Flush();
// 将内存流转换为比特数组
byte[] bytes = ms.ToArray();
// 输出比特数组
foreach (byte b in bytes)
{
Console.Write(b + " ");
}
}
}
在上述示例中,我们使用 MemoryStream
和 StreamWriter
将字符串写入内存流,然后使用 MemoryStream.ToArray()
函数将内存流转换为比特数组,最终将比特数组输出到控制台,输出结果为 72 101 108 108 111 32 119 111 114 108 100 33
。
示例2:将比特数组转换为字符串,并输出到文本文件
using System;
using System.IO;
using System.Text;
class Program
{
static void Main(string[] args)
{
Encoding utf8 = Encoding.UTF8;
// 从文件读取比特数组
byte[] bytes = File.ReadAllBytes("test.bin");
// 将比特数组转换为字符串
string str = utf8.GetString(bytes);
// 将字符串写入到文本文件
File.WriteAllText("test.txt", str);
}
}
在上述示例中,我们使用 File.ReadAllBytes()
函数读取文件测试文件 test.bin
的二进制数据,并使用 Encoding.GetString()
函数将比特数组转换为字符串,最后使用 File.WriteAllText()
函数将字符串写入到 test.txt
中作为文本文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换 - Python技术站