【问题标题】:byte[] to string conversion doesn't seem to work the way I wantbyte[] 到字符串的转换似乎不像我想要的那样工作
【发布时间】:2009-06-02 12:57:36
【问题描述】:

我正在尝试在文本文件中显示字节数组的内容。

这是我的代码:

        var writer = new System.IO.StreamWriter(Application.StartupPath + @"\B323.txt");
        writer.Write(data.ToString());
        writer.Close();
        writer.Dispose();

data 是一个 byte[] 数组。

输出是“System.Byte[]”,为什么?

我正在尝试显示这个数组的内容,问题出在哪里?

【问题讨论】:

    标签: c# text


    【解决方案1】:

    当您调用 byte[].ToString() 时,它只会返回 System.Byte[]。你打算如何转换字节数组?将字节转换为字符串的方法有很多种。

    如果您希望它作为“十六进制转储”,您可以 BitConverter.ToString(byte[]) 生成输出,例如

    5B-3E-5D
    

    这就是你所追求的吗?如果您实际上只想将字节写入文件,因为它们已经表示编码文本,那么您应该改用FileStream 并直接写入它们。 p>

    (其他要点:您应该使用using 语句来处理作者;您不需要调用close,因为您已经在处理;File.WriteAllText 是一种更简单的方法来开始.)

    【讨论】:

    • 我只想知道为什么它显示“System.Byte[]”。是的,这就是我想要的,但我使用 LINQ 来显示字符之间的空格而不是破折号。我只是想知道为什么它显示 System.Byte[]
    • Object.ToString() 的默认实现是转储类型名称。数组不会覆盖这个。
    • 谢谢乔恩!你的书第二版进展如何?我等不及了!
    • 进展缓慢 :) 希望我能尽快提供有关“抢先体验”的信息...
    【解决方案2】:

    data 上调用 ToString 会将其转换为文本表示(调试时您将在 Watch 或 Locals 窗口中看到相同的表示)。

    您可以直接将data 写入流,或使用位于System.Text.Encoding 中的函数之一将您的字节[] 转换为字符串。

    【讨论】:

      【解决方案3】:

      默认的 ToString() 实现只是回显类名。您可能需要其中一种 Encoding.GetString() 方法,例如 ASCIIEncoding.GetString

      【讨论】:

        【解决方案4】:

        你想做什么?将数据写成字节还是文本表示?

        二进制:

        FileStream fS = new FileStream(Application.StartupPath + @"\B323.txt");
        BinaryWriter bW = new BinaryWriter(fS);
        bW.Write(data);
        fS.Close();
        

        或者

        文本表示:

        var writer = new System.IO.StreamWriter(Application.StartupPath + @"\B323.txt");
        writer.Write(System.Text.ASCIIEncoding.ASCII.GetString(data));
        writer.Close();
        

        【讨论】:

          【解决方案5】:

          取决于您希望数组在文本文件中的表示方式,可能类似于以下内容:

          // 12-34-AB
          writer.Write(BitConverter.ToString(data));
          
          // 1234AB
          writer.Write(BitConverter.ToString(data).Replace("-", string.Empty));
          
          // 0x1234AB
          writer.Write("0x" + BitConverter.ToString(data).Replace("-", string.Empty));
          
          // [ 12, 34, AB ]
          writer.Write("[ " + BitConverter.ToString(data).Replace("-", ", ") + " ]");
          
          // [ 0x12, 0x34, 0xAB ]
          writer.Write("[ 0x" + BitConverter.ToString(data).Replace("-", ", 0x") + " ]");
          

          【讨论】:

            猜你喜欢
            • 2016-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-04
            • 1970-01-01
            • 1970-01-01
            • 2015-05-16
            • 1970-01-01
            相关资源
            最近更新 更多