C# 如何将二进制文件转换为一组ascii字符

C# 如何将二进制文件转换为一组ascii字符,c#,encoding,io,ascii,C#,Encoding,Io,Ascii,我想将二进制文件转换为ascii字符数组。我该怎么做呢。 谢谢。您可以阅读每个字符并将其转换为一个字符。将每个字节转换为ascii字符。这就是您想要做的吗?查看BASE64或UUEncoding。我假设您只想使用256字符ASCII集中的可打印字符 BASE64仅使用64个字符(例如,有时在通过电子邮件发送二进制文件时使用)。这会导致输出量的增长——在你的情况下你必须考虑的事情。 < P>这取决于你想用它做什么。Ascii应为7位(0-127定义良好,其他字符取决于代码页)。因此,简单的ASCI

我想将二进制文件转换为ascii字符数组。我该怎么做呢。
谢谢。

您可以阅读每个字符并将其转换为一个字符。将每个字节转换为ascii字符。这就是您想要做的吗?

查看BASE64或UUEncoding。我假设您只想使用256字符ASCII集中的可打印字符


BASE64仅使用64个字符(例如,有时在通过电子邮件发送二进制文件时使用)。这会导致输出量的增长——在你的情况下你必须考虑的事情。

< P>这取决于你想用它做什么。Ascii应为7位(0-127定义良好,其他字符取决于代码页)。因此,简单的ASCII编码可能会导致令人不快的意外(其中包括非可打印字符,如空字符…)

StreamReader reader = new StreamReader("pathtoyourbinaryfile", System.Text.Encoding.ASCII);
char[] text = reader.ReadToEnd().ToCharArray();
如果您希望从字节数组中打印出一些内容,则不应使用ASCII编码对其进行转换。您最好用Base64编码,这是一种安全的(尽管在大小方面不是太理想)方法,可以将二进制编码为字符串

要在Base64中对字节进行编码,只需执行以下操作:

string result = System.Convert.ToBase64String(yourByteArray);

我不相信先前的答复者回答了这个问题。很多人说ASCII是指字节,所以我怀疑提问者想要读取的是二进制文件,而不是带有编码字符的文本文件

为了演示不同技术的影响,我使用以下字符串创建了一个UTF-8文本文件:

  string s = "\ta£\x0394\x221A";   // tab; lower case a; pound sign; Greek delta; square root  
以下程序首先将此文件读取为文本字符串,然后读取为字节数组。在每种情况下,它首先以十进制显示输入,然后以十六进制显示输入

  String test = "";
  String fileStg = File.ReadAllText("Test.txt");
  for (int i = 0; i < fileStg.Length; i++)
    test += (int)fileStg[i] + " ";
  Debug.Print(test);
  test = "";
  for (int i = 0; i < fileStg.Length; i++)
    test += ((int)fileStg[i]).ToString("X") + " ";
  Debug.Print(test);
  test = "";
  Byte[] fileByte = File.ReadAllBytes(pathProg + "Test.txt");
  for (int i = 0; i < fileByte.Length; i++)
    test += fileByte[i].ToString() + " ";
  Debug.Print(test);
  test = "";
  for (int i = 0; i < fileByte.Length; i++)
    test += fileByte[i].ToString("X") + " ";
  Debug.Print(test);
请注意,当作为文本文件读取时,BOM表已被剥离,多字节UTF-8字符已成为输入字符串中的单个字符。但是当作为字节数组读取时,我会收到BOM和原始UTF-8


我怀疑发问者想要读取一个真正的二进制文件而不是Unicode文本文件,但我相信这个例子更好地说明了这两种技术的效果,并证明如果发问者希望读取一个二进制文件,那么ReadAllBytes是更合适的技术

请提供更多信息?我想你说的只是可打印字符。并非所有256个ASCII字符都是可打印的。这些问题让我想起是的,在C#中使用Convert.ToBase64String()True执行此操作很简单,尽管将Base64字符串转换为ASCII是安全的,并且只会生成可打印的字符。
9 97 163 916 8730 13 10
9 61 A3 394 221A D A
239 187 191 9 97 194 163 206 148 226 136 154 13 10
EF BB BF 9 61 C2 A3 CE 94 E2 88 9A D A