【问题标题】:Converting string, etc. into bytes and byte arrays将字符串等转换为字节和字节数组
【发布时间】:2026-02-20 03:05:01
【问题描述】:

有没有静态方法将字符串、int等转换成字节/字节数组?

这个方法我已经知道了:

    public static byte[] FromString(string Input)
    {
        ASCIIEncoding ByteEncoder = new ASCIIEncoding();
        return ByteEncoder.GetBytes(Input);
    }

但我想知道是否有更好的方法。如果我制作了 ASCII 编码器的静态实例来使用会不会有问题?

另外 - 在性能方面 - 上述 ASCII 转换方法与通过 for 循环或其他多行解决方案的此类方法相比如何?

另外 - 我什么时候应该使用 ASCII 和 Unicode?​​p>

威廉

【问题讨论】:

标签: c# bytearray byte type-conversion


【解决方案1】:

没有静态方法。然而,Encoding 也有静态实例。

System.Text.Encoding.ASCII.GetBytes().

就性能而言,您应该信任 BCL。它经过精心编写,因此您应该期待接近最佳的代码,并且当然可以更好地处理人们并不总是考虑的所有边缘情况。

【讨论】:

  • 有趣的是,该类被标记为对于实例成员不是线程安全的:msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx。为了安全起见,我建议在多线程场景中创建新实例。
  • 使用Encoding.ASCII 会更清楚——没有必要使用ASCIIEncoding.ASCII
  • @ChrisShain:不,这些绝对是线程安全的。确实没有必要创建新实例。编码中没有可变状态。编码器/解码器中有 ,但那是另一回事。
  • @JonSkeet 我想,只是没有看到任何文档。总是让我紧张。
  • @Fuex:因为它是在 Encoding 上声明的 - 如果你写 ASCIIEncoding.ASCII看起来就像它在 ASCIIEncoding 上声明的一样。
【解决方案2】:

已经回答了主要问题,但要回答最后一个问题,如果您必须支持非英语字符集和符号,请使用 Unicode。如果您使用全局字符的英文子集,请坚持使用 ASCII(虽然我更喜欢 UTF-8。另外,这是分享 Spolsky 智慧的好机会。http://www.joelonsoftware.com/articles/Unicode.html - 非常好的文章。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      看看BitConverter。它支持整数和浮点数。还有Encoding.UTF8 用于字符串。

      BitConverter.GetBytes(4); // Int32
      
      System.Text.Enconding.UTF8.GetBytes("My string"); // String
      

      您可能希望支持 unicode,即使您不使用它。尝试 UTF8 而不是 ascii,这样您就可以在需要时支持扩展字符。

      【讨论】: