FileStream Write()方法只写入未知符号
本文关键字:未知 符号 方法 Write FileStream | 更新日期: 2023-09-27 18:20:35
这是我的代码,它只在fileout.txt中写入这些符号。有什么问题,如何修复?
byte[] bArray = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
FileStream file_out = new FileStream(@"C:'fileout.txt",
FileMode.Create);
file_out.Write(bArray, 2, 4);
file_out.Close();
抱歉,这里没有显示符号,但为什么我不知道。这个simbols有点像上行符号,小r是其他一些符号。
您的输出是实际的字节,而不是对讲英语的人(以及许多其他语言,但不是全部)表示它们的字符。
你可能会写的字符是一些主要具有历史意义的控件,尽管美联社仍在使用ANPA-1312,并使用它们:
START OF TEXT先于消息的实际文本。(0x01,您跳过的是标题的开头。
文本结束文本结束。此外,Ctrl+C结束一个正在运行的DOS程序就是这个控件。
传输结束再见。用作注销字符。
查询你还在吗?
阵列中要打印的还包括:
NULL(NULL char,而不是null
在C#中的意思):在某些格式中用于表示字符串的末尾、"有意义的文本的末尾"等。
标题开头:如上所述。
是的,我在这里。也用于TCP/IP握手。
贝尔:如果你把这个寄给他们,仍然有打印机会发出叮当声。
退格打印u
,然后退格,然后是¨
曾经是你写ü
的方式。请记住,如果Unicode似乎比ASCII更复杂。实际上,只拥有一个ü
更简单。还有回来,X回来,X回去,X是一个旧的"删除"!
CHARACTER TAB是这些字符中的第一个,您可能会在不太低级别的现代代码中使用这些字符。"tab"字符。当然,它本身看起来并不怎么样。
您可能想要的是输出字符'0'
、'1'
等等
你可以:
手动对它们进行编码。'0'
为0x30,'1'
为0x31。这是一件你应该知道如何做的事情,但99%的时候你不应该自己做。
使用文本编写器。这将获取不同类型的值,并(可选地使用定义的格式规则)输出表示这些值的文本。因此
using(FileStream file_out = new FileStream(@"C:'fileout.txt", FileMode.Create)
using(TextWriter tw = new StreamWriter(file_out))
for(int i = 2; i != 6; ++i)
tw.Write(bArray[i]);
这将非常有效地将字节转换为人类可读的等效字节。这与输出0x32、0x33、0x34、0x35相同,当在记事本中打开时,它看起来像"2345"。
如果您从其他地方接收字节(例如从某个地方创建或获得图像流),或者做一些非常低级的事情,那么您通常希望直接写入字节。
是的,您正在写出字节2、3、4、5。据我所知,这些都不是任何编码的可打印文本。
我不清楚你期望什么,也不清楚为什么你期望它最终成为可打印的文本,但如果你想写文本(而不是二进制)数据,你应该使用某种形式的TextWriter
,例如StreamWriter
。
您应该使用类似的东西
public static void Main()
{
byte[] bArray = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
using (StreamWriter outfile =
new StreamWriter(@"C:''fileout.txt"))
{
foreach (var b in bArray)
{
outfile.Write(b);
}
}
Console.ReadLine();
}
这将导致一个包含的文本文件
0123456789