【问题标题】:How do you convert a string to a byte array in .NET?如何在 .NET 中将字符串转换为字节数组?
【发布时间】:2026-01-28 03:30:02
【问题描述】:

我有一个字符串,我需要将其转换为 .NET 中的等效字节数组。

这应该很容易,但我脑子抽筋了。

【问题讨论】:

    标签: .net string bytearray


    【解决方案1】:

    You need to use an encoding (System.Text.Encoding) 告诉 .NET 你期望的输出是什么。例如在UTF-16 (= System.Text.Encoding.Unicode):

    var result = System.Text.Encoding.Unicode.GetBytes(text);
    

    【讨论】:

    • System.Text.Encoding 中的编码不仅仅是 Unicode:请确保您了解您需要的编码。
    • 乔尔:因此我写了“例如”。 ;-) 但你的评论当然是有效的。
    • :) 试图帮助显示非 UTF16 编码的位置——我可能会措辞更好。
    • 你能看看我的question相关吗?
    【解决方案2】:

    首先确定你想要哪种编码:你需要先知道a bit about Unicode

    接下来找出对应的System.Text.Encoding。我的Core .NET refcard 描述了大多数常见的实例,以及如何获取实例(例如,通过Encoding 的静态属性或通过调用Encoding.GetEncoding

    最后,确定您是否需要同时获取所有字节(这是最简单的工作方式 - 调用一次 Encoding.GetBytes(string) 即可完成)还是需要将其分成块 - 在这种情况下,您我想使用Encoding.GetEncoder,然后一次编码一点。编码器负责保持调用之间的状态,以防您需要在字符中途中断。

    【讨论】:

    • @Mehrdad:你绝对会这样做。编码定义从字符串到字节数组的转换做什么。压缩和加密是完全不同的事情。否则就像说当您要将图片另存为文件时图像格式无关紧要 - 许多不同的图像格式可能都可以,但根据定义,必须涉及一个。跨度>
    • @Mehrdad:不,用户确实需要知道编码。仅仅因为 UTF-16 在某种意义上是自然编码 for .NET 并不意味着它是他想要使用的编码。写出数据的目的是为了可以再次读取它——这需要使用相同的编码。 OP 提到“等效的字节数组”这一事实表明他们不知道编码甚至存在,如果您要在文本和二进制之间进行转换,了解编码是 至关重要表示。
    • 我见过 无数 人未能正确保存信息,因为他们不了解编码。根据我的经验,对他们进行有关该主题的教育比使用Buffer.BlockCopy假设这是他们想要的更好的方法。
    • @Mehrdad:但是 someone 稍后会解释这些字节。您说得对,压缩/加密部分不需要关心,但是以后将其转换回字符串的任何事情都绝对可以......如果没有人 ever 会解释数据,它在那里没有多大意义。所以是的,您仍然需要选择一种编码,并确保它的使用一致。您决定使用的编码在某种程度上是任意的,只要它可以对您的所有文本进行编码,尽管它会影响空间等。但任意与无关紧要不同。
    • @Mehrdad:是的,绝对是。就像您想要将图片保存到磁盘时必须选择图像格式一样。尽可能使用该类比。字符串不是由字节组成的(从概念上讲),因此为了将 转换为 字节,您必须进行某种转换……而这正是编码。
    【解决方案3】:

    您使用的是什么编码? Konrad 已经搞定了,但还有其他的,如果用错了,你可能会得到愚蠢的结果:

    byte[] bytes = System.Text.Encoding.XXX.GetBytes(text)
    

    XXX 可以是:

    ASCII
    BigEndianUnicode
    Default
    Unicode
    UTF32
    UTF7
    UTF8
    

    【讨论】:

      【解决方案4】:

      像这样:

          string test = "text";
          byte[] arr = Encoding.UTF8.GetBytes(test);
      

      【讨论】: