【问题标题】:BitConverter uchar? [duplicate]BitConverter uchar? [复制]
【发布时间】:2017-06-14 07:45:38
【问题描述】:

如何将字节数组转换为无符号字符(0 到 255,而不是 -127 到 127)

如果我没记错的话,BitConverter 只有BitConverter.ToChar,它不会给我我正在寻找的结果。

谢谢。

【问题讨论】:

  • @DanielA.White Nah,.NET 中所谓的System.Char 是一个由 16 位组成的 UTF-16 代码单元。当然,它可能是代理对的下部或上部,或者它可能编码一个组合字符。但是 .NET 中的 Char 不是 8 位。
  • 您要求的类型是什么?带符号的 8 位整数在 C# 中称为 sbyte(在框架中称为 System.SByte)。无符号 8 位整数称为 byte (System.Byte)。你说的是 char,但在 C# 中,关键字 char 用于 UTF-16 代码单元,其范围从 065535

标签: c#


【解决方案1】:

字节数组 (byte[]) 已经是 0 到 255 项的数组。.NET 中的chars 是多字节的,因为它们是 Unicode。 .NET 中没有 uchar 这样的东西。

【讨论】:

    【解决方案2】:

    这取决于您的使用情况。 BitConverter.ToCharis used to convert 2 个字节从你的字节数组到一个 Unicode 字符(认为这是反序列化)。在 .NET 中,chardata type is used to 代表一个实际的 Unicode 字符,因此它包含 2 个字节。

    如果您的目标是简单地获取 0 到 255 之间的整数数组,那么您的字节数组正是您所需要的。

    【讨论】:

      【解决方案3】:

      您可以将字节数组转换为字符串

      string str = System.Text.Encoding.ASCII.GetString(bytes);
      

      或将它们转换/转换为char

      char[] chars = Array.ConvertAll(bytes, Convert.ToChar);
      

      【讨论】:

      • 如果所有字节都在0127 范围内,Encoding.ASCII 很有用。否则,请选择“代码页”,例如 string str = (new System.Text.Encoding("Windows-1252")).GetString(bytes);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多