用 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);
我的家庭作业需要做一些艺术品。给定的是一个字节数组,我需要将其显示为 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);