我正在尝试在文本文件中显示字节数组的内容。
这是我的代码:
var writer = new System.IO.StreamWriter(Application.StartupPath + @"\B323.txt");
writer.Write(data.ToString());
writer.Close();
writer.Dispose();
data是byte []数组。
输出是“System.Byte []”,为什么?
我正在尝试显示此数组的内容,问题出在哪里?
答案 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") + " ]");