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日

相关文章

  • 数据库 数据类型float到C#类型decimal, float数据类型转化无效

    问题描述: 在将数据库中的float数据类型转换成C#的decimal类型时,有些数据会发生转化无效的情况。这是由于float数据类型的精度问题所导致的。本文将详细介绍如何解决这个问题,并提供两个演示示例。 解决步骤: 1.使用double类型进行过渡转换 当我们将数据库中的float类型转化成decimal类型时,可以使用double类型作为过渡类型。这是…

    C# 2023年5月15日
    00
  • C#实现分治算法求解股票问题

    C#实现分治算法求解股票问题攻略 简介 本文将介绍如何使用C#语言实现分治算法求解股票问题。 股票问题是一道经典的算法问题,在股票市场中,假设你只能进行一次买卖(即买卖一支股票),请你设计一个算法,找出最大的收益。其中股票当天的价格列表作为输入。例如,给定价格为[7,1,5,3,6,4]的股票价格列表,则通过一次买卖可以获得的最大收益为5。 分治算法是一种将…

    C# 2023年6月8日
    00
  • 探讨jQuery的ajax使用场景(c#)

    探讨 jQuery 的 ajax 使用场景(c#) 什么是 ajax ajax 是 Asynchronous JavaScript and XML 的缩写,也就是异步的 JavaScript 和 XML。它是一种无需刷新整个页面就可以与服务器进行数据交互的技术。 jQuery 中的 ajax jQuery 提供了一些方便的方式来实现 ajax。通过 jQue…

    C# 2023年5月31日
    00
  • WCF和Remoting之间的消息传输

    下面是关于“WCF和Remoting之间的消息传输”的完整攻略,包含两个示例。 1. WCF和Remoting之间的消息传输 WCF和Remoting都是.NET Framework中用于实现分布式应用程序的技术。WCF使用SOAP协议和HTTP协议进行消息传输,而Remoting使用二进制协议和TCP协议进行消息传输。在.NET Framework 3.0…

    C# 2023年5月15日
    00
  • .NET中常见的加解密算法详解

    .NET中常见的加解密算法详解 简介 在计算机系统中,加密算法是保证数据安全和隐私保护的重要手段。在.NET开发中,常使用的加解密算法有对称加密算法、非对称加密算法和哈希加密算法。 对称加密算法 对称加密算法使用相同的密钥来加密和解密数据。在.NET中,常见的对称加密算法有DES、TripleDES、AES等。其中,AES是目前最常用的对称加密算法,它支持1…

    C# 2023年5月31日
    00
  • C# Invoke,begininvoke的用法详解

    C#中的Invoke和BeginInvoke是两个非常重要的方法,它们可以在多线程程序开发中扮演重要的角色。 Invoke和BeginInvoke的作用 Invoke和BeginInvoke的作用都是在UI线程上执行一个委托,Invoke会使调用线程阻塞,而BeginInvoke则会立即返回并在UI线程上异步执行委托。 在WinForm应用程序中,由于涉及到…

    C# 2023年5月15日
    00
  • 初学C#所需明白的那些点

    当你初学 C# 时,需要了解以下几点: 安装C#开发环境 在开始 C# 编程之前,你需要安装 .NET Framework 和 Visual Studio。.NET Framework 提供各种编程语言的软件基础设施,同时和 Windows 操作系统绑定,运行 .NET 程序必须安装该框架。而 Visual Studio 是 Microsoft 开发的一款 …

    C# 2023年6月7日
    00
  • C#设置MDI子窗体只能弹出一个的方法

    要实现C#中的MDI子窗体只能弹出一个的功能,可以通过以下步骤来实现: 首先,需要在程序启动时禁用MDI窗体的自动创建子窗体的功能,以便手动创建并管理子窗体。可以通过设置IsMdiContainer属性为false实现。 this.IsMdiContainer = false; 在需要弹出子窗体的地方,先检查当前是否已经存在同类型的子窗体,如果存在则不再弹出…

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