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是其他一些符号。

FileStream Write()方法只写入未知符号

您的输出是实际的字节,而不是对讲英语的人(以及许多其他语言,但不是全部)表示它们的字符。

你可能会写的字符是一些主要具有历史意义的控件,尽管美联社仍在使用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