C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

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 + " ");
        }
    }
}

在上述示例中,我们使用 MemoryStreamStreamWriter 将字符串写入内存流,然后使用 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技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#委托和事件

    1.委托 两大作用: (1)将方法当作参数传递 (2)方法的一种多态(多播委托) 一个弊端: 委托可以使用=,+=,-=来发布订阅,所以这里有一个弊端,它可以使用“=”将所有已经订阅的取消,只保留=后的这一个订阅。这样如果让多个类中写的委托轻易就能被修改,让程序变得不安全,所以为了解决这个弊端,事件event应运而生。 多说几句,委托和event的关系就类似…

    C# 2023年4月18日
    00
  • C#中实现Fluent Interface的三种方法

    C#中实现Fluent Interface的三种方法攻略: 什么是Fluent Interface? Fluent Interface是一种编写API的方式,通过链式调用的语法方式,在代码中呈现出一种自然语言句子的形式。这种形式使得代码更加易读,易用,更具可扩展性。 方法一:基于接口实现 第一种方法是基于接口实现。通过使用C#中的接口和扩展方法,我们可以使得…

    C# 2023年6月3日
    00
  • C#位运算符的基本用法介绍

    C#位运算符的基本用法介绍 什么是位运算符? 位运算符是一组针对二进制数进行操作的运算符。C#中的位运算符包括位与(&)、位或(|)、取反(~)、异或(^)、左移(<<)和右移(>>), 下面逐一介绍它们的用法。 位与(&) 位与运算符用于将两个二进制数的相应位设置为1,然后返回一个新的值。只有当两个数的相应位都是1时…

    C# 2023年6月7日
    00
  • C# HttpClient 如何使用 Consul 发现服务

    C# HttpClient如何使用Consul发现服务 Consul是一种服务发现和配置工具,可以用于在分布式系统中注册、发现和配置服务。C# HttpClient可以使用Consul来发现服务,以便在分布式系统中进行通信。本文将提供详细的“C# HttpClient如何使用Consul发现服务”的完整攻略,包括如何使用Consul来发现服务,以及示例代码。…

    C# 2023年5月15日
    00
  • C#异步下载文件

    当我们需要下载大型文件时,使用异步操作可以显著提高性能和效率。C#中提供了异步操作下载文件的方法,本篇攻略将介绍相关的知识点以及实现方法,包括异步下载文件的基本原理、实现步骤和两个具体的示例。 基本原理 异步下载文件的基本原理是将下载操作拆分成多个子任务,让操作系统去协调这些任务的执行,从而减小了主线程的负担,提高了程序的执行效率。具体实现方法是: 创建一个…

    C# 2023年6月1日
    00
  • c# 屏蔽快捷键的实现示例

    接下来我将详细讲解“C# 屏蔽快捷键的实现示例”的完整攻略,包含两个示例说明: 1. 使用WinAPI的方式屏蔽快捷键 1.1 前置知识 使用 C# 中屏蔽快捷键需要了解很多底层 Windows API 函数的使用方法,其中包括: SetWindowsHookEx 函数:用于钩取键盘操作 UnhookWindowsHookEx 函数:用于取消键盘钩子 Cal…

    C# 2023年6月7日
    00
  • asp.net(c#)程序版本升级更新的实现代码

    升级更新是软件开发中非常重要的一步,在asp.net(c#)开发中也同样重要。下面是一个完整的攻略,帮助你了解ASP.NET(C#)程序版本升级更新的实现代码。 1. 创建新版本 在升级更新前,需要创建一个新版本。这可以通过复制现有版本并进行更新来完成。在此过程中,确保版本的文件结构和代码结构保持一致。在文件和代码都做好更新的情况下,将该版本打包。如果需要,…

    C# 2023年5月31日
    00
  • 利用Warensoft Stock Service编写高频交易软件

    利用Warensoft Stock Service编写高频交易软件需要具备一定的编程和交易知识。下面是一些步骤,可以帮助您开始: 1. 注册并开通Warensoft帐户 Warensoft是提供互联网股票交易服务的平台。首先,需要在Warensoft官网上注册一个帐户,并通过实名认证等方式完成开户流程。注册后,可以使用Warensoft Stock Serv…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部