【问题标题】:Converting byte array to string and printing out to console将字节数组转换为字符串并打印到控制台
【发布时间】:2012-06-12 01:01:51
【问题描述】:
public void parse_table(BinaryReader inFile) { 字节[] idstring = inFile.ReadBytes(6); Console.WriteLine(Convert.ToString(idstring)); }

这是一个简单的 sn-p:读取文件的前 6 个字节并将其转换为字符串。

但是控制台显示System.Byte[]

也许我使用了错误的类进行转换。我应该使用什么?它最终会解析以 UTF-8 编码的文件名,我打算使用相同的方法来读取所有文件名。

【问题讨论】:

    标签: c#


    【解决方案1】:

    其实是:

        Console.WriteLine(Encoding.Default.GetString(value));
    

    或者专门针对 UTF-8:

        Console.WriteLine(Encoding.UTF8.GetString(value));
    

    【讨论】:

    • 如果要打印字节怎么办?
    • @pyCthon:你问这个问题是什么意思?
    • @pyCthon 如果您想打印出字节值,请查看my answer
    • 别忘了你还需要通过using System.Text 导入Encoding
    【解决方案2】:

    我陷入了困境,我有一个 signed 字节数组 (sbyte[]) 作为测试类的输入,我想用普通字节数组 (byte[]) 替换它简单。我通过 Google 搜索来到这里,但汤姆的回答对我没有用。

    我写了一个辅助方法来打印给定byte[]的初始化器:

    public void PrintByteArray(byte[] bytes)
    {
        var sb = new StringBuilder("new byte[] { ");
        foreach (var b in bytes)
        {
            sb.Append(b + ", ");
        }
        sb.Append("}");
        Console.WriteLine(sb.ToString());
    }
    

    你可以这样使用它:

    var signedBytes = new sbyte[] { 1, 2, 3, -1, -2, -3, 127, -128, 0, };
    var unsignedBytes = UnsignedBytesFromSignedBytes(signedBytes);
    PrintByteArray(unsignedBytes);
    // output:
    // new byte[] { 1, 2, 3, 255, 254, 253, 127, 128, 0, }
    

    输出是有效的 C#,然后可以将其复制到您的代码中。

    为了完整起见,这里是UnsignedBytesFromSignedBytes 方法:

    // http://stackoverflow.com/a/829994/346561
    public static byte[] UnsignedBytesFromSignedBytes(sbyte[] signed)
    {
        var unsigned = new byte[signed.Length];
        Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length);
        return unsigned;
    }
    

    【讨论】:

      【解决方案3】:

      这只是 Jesse Webbs 代码的更新版本,它没有附加不必要的尾随 , 字符。

      public static string PrintBytes(this byte[] byteArray)
      {
          var sb = new StringBuilder("new byte[] { ");
          for(var i = 0; i < byteArray.Length;i++)
          {
              var b = byteArray[i];
              sb.Append(b);
              if (i < byteArray.Length -1)
              {
                  sb.Append(", ");
              }
          }
          sb.Append(" }");
          return sb.ToString();
      }
      

      这个方法的输出是:

      new byte[] { 48, ... 135, 31, 178, 7, 157 }
      

      【讨论】:

        【解决方案4】:

        我在我的代码库中使用了这个简单的代码:

        static public string ToReadableByteArray(byte[] bytes)
        {
            return string.Join(", ", bytes);
        }
        

        使用方法:

        Console.WriteLine(ToReadableByteArray(bytes));
        

        【讨论】:

          【解决方案5】:
           byte[] bytes = { 1,2,3,4 };
          
           string stringByte= BitConverter.ToString(bytes);
          
           Console.WriteLine(stringByte);
          

          【讨论】:

            【解决方案6】:

            对于 linq 和字符串插值的一些乐趣:

            public string ByteArrayToString(byte[] bytes)
            {
                if ( bytes == null ) return "null";
                string joinedBytes = string.Join(", ", bytes.Select(b => b.ToString()));
                return $"new byte[] {{ {joinedBytes} }}";
            }
            

            测试用例:

            byte[] bytes = { 1, 2, 3, 4 };
            ByteArrayToString( bytes ) .Dump();
            ByteArrayToString(null).Dump();
            ByteArrayToString(new byte[] {} ) .Dump();
            

            输出:

            new byte[] { 1, 2, 3, 4 }
            null
            new byte[] {  }
            

            【讨论】:

              猜你喜欢
              • 2019-06-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-03
              • 2012-03-11
              • 1970-01-01
              • 2017-08-17
              • 2021-11-11
              相关资源
              最近更新 更多