byte []到字符串转换似乎不像我想要的那样工作

时间:2009-06-02 12:57:37

标签: c# text

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

这是我的代码:

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

data是byte []数组。

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

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

5 个答案:

答案 0 :(得分:7)

当您致电刚刚返回byte[].ToString()的{​​{1}}时。你是如何打算转换字节数组的?有许多方法可以将字节转换为字符串。

如果你想把它作为“十六进制转储”,你可以System.Byte[]产生输出,例如

BitConverter.ToString(byte[])

这就是你要追求的吗?如果实际上想要将字节写入文件,因为它们已经代表编码文本,那么您应该使用5B-3E-5D 代替直接编写它们。

(其他要点如下:你应该使用FileStream语句来处理作者;你不需要调用close因为你已经处理; using是一种更简单的做法这一开始。)

答案 1 :(得分:3)

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

您可以只将data写入流,也可以使用System.Text.Encoding中的某个函数将byte []转换为字符串。

答案 2 :(得分:3)

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

答案 3 :(得分:1)

你想做什么?将数据写为字节或文本表示?

二进制:

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();

答案 4 :(得分:1)

根据您希望数组在文本文件中的表示方式,可能是这样的:

// 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") + " ]");