如何将二进制文件转换为一组as​​cii字符

时间:2009-05-29 14:51:40

标签: c# encoding io ascii

我想将二进制文件转换为ascii字符数组。我怎样才能做到这一点 。 谢谢。

5 个答案:

答案 0 :(得分:4)

这取决于你想用它做什么。 Ascii应该是7位(0-127是明确定义的,其他字符是代码页依赖的)。因此,纯ASCII编码可能会导致令人讨厌的意外(其中非打印字符为空值...)

如果您希望从字节数组中打印出某些内容,则不应使用ASCII编码对其进行转换。你最好用Base64编码它,这是一种安全的(尽管不是太优选的大小)方式来编码字符串中的二进制文件。

要在Base64中编码您的字节,您可以使用:

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

答案 1 :(得分:2)

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

BASE64仅使用64个字符(例如,有时在通过电子邮件发送二进制文件时使用此字符)。这会导致输出大小增加 - 在您的情况下您必须考虑这一点。

答案 2 :(得分:1)

StreamReader reader = new StreamReader("pathtoyourbinaryfile", System.Text.Encoding.ASCII);
char[] text = reader.ReadToEnd().ToCharArray();

答案 3 :(得分:0)

您可以阅读每个角色,然后将其投射到角色。这会将每个字节转换为ascii字符。那是你想要做的吗?

答案 4 :(得分:0)

我不相信早期的回应者回答了这个问题。许多人在说字节时都说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);

输出:

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

请注意,当作为文本文件读取时,BOM已被剥离,并且多字节UTF-8字符已成为输入字符串中的单个字符。但是当作为字节数组读取时,我会收到BOM和原始UTF-8。

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