用 C# 制作 ASCII?

Making ASCII with C#?

我的家庭作业需要做一些艺术品。给定的是一个字节数组,我需要将其显示为 7 行,每行 11 个字符,但我真的不知道如何构建它,而且,我收到了一个 System.IO.EndOfStreamExeption(它连接到而部分)。最后,我很确定它应该在控制台上显示“C#”。

internal class Program
{
    public void ESAIn(string Path)
    {
        byte[] array = { 32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
                        32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                        67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                        67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
                        67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                        32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                        32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };

        FileStream stream = File.Open(Path, FileMode.Truncate, FileAccess.ReadWrite);

        stream.Write(array, 0, array.Length);
        stream.Close();
    }

    public void ESAOut(string Path)
    {
        BinaryReader reader = new BinaryReader(File.Open(Path, FileMode.Open));
        var count = 0;
        int b;

        while ((b = reader.ReadByte()) > -1)
        {
            Console.Write((char)b);
            if (count > 0 && (++count % 11) == 0)
            {
                Console.WriteLine();
            }
        }
    }

如果您只想将 byte[] 保存到文件中,请调用 File.WriteAllBytes

 byte[] array = ...

 File.WriteAllBytes("myFile.dat", array);

但您似乎想将每个 11 字节转换为 string,然后才将这些字符串保存到文件中。我们可以通过在 Linq:

的帮助下查询 array 来完成
 using System.IO;
 using System.Linq;

 ...

 byte[] array = ...

 var lines = array
   .Select((value, index) => new { value, index })
   .GroupBy(pair => pair.index / 11, pair => pair.value)
   .Select(group => string.Concat(group.Select(b => (char)b)));

 File.WriteAllLines("myFile.txt", lines);

现在myFile.txt包含

  CC   # # 
 C  C  # # 
C     #####
C      # # 
C     #####
 C  C  # # 
  CC   # # 

编辑:如果你想按原样存储array

 File.WriteAllBytes("myFile.dat", array);

要加载文件并显示艺术作品,您可以使用 File.ReadAllBytes 获得 byte[] 然后 Linq 获得文本表示:

 string art = string.Join(Environment.NewLine, File
   .ReadAllBytes("myFile.dat")
   .Select((value, index) => new { value, index })
   .GroupBy(pair => pair.index / 11, pair => pair.value)
   .Select(group => string.Concat(group.Select(b => (char)b)))
 );

 Console.Write(art);