2009-05-29 68 views
0

我想將二進制文件轉換爲ascii charcters數組。我怎樣才能做到這一點 。 謝謝。如何將二進制文件轉換爲一組as​​cii文字記錄器

+0

請提供更多信息? – 2009-05-29 14:53:29

+0

我假設你只談論可打印的字符。並非所有的256個ASCII字符都是可打印的。 – 2009-05-29 14:55:30

+0

這些問題讓我想起http://en.wikipedia.org/wiki/File:Bird_converted_to_ASCII_characters.png – tanascius 2009-05-29 15:01:03

回答

4

這取決於你想要用它做什麼。 Ascii應該是7位(0-127是明確的,其他字符是代碼頁相關的)。所以普通的ASCII編碼可能會導致令人討厭的驚喜(其中包括非printables字符作爲空值...)

如果您希望將某些內容打印到字節數組中,則不應將其轉換爲ASCII編碼。你最好在Base64中編碼它,這是一種安全的(儘管不是最優的尺寸)方法來編碼字符串中的二進制。

來編碼Base64編碼的字節,你可以只是去:

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

您可以讀取每個字符並將其轉換爲字符。這會將每個字節轉換爲ASCII字符。那是你想要做的嗎?

2

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

BASE64僅使用64個字符(有時在通過電子郵件發送二進制文件時使用此字符)。這會導致輸出的大小增加 - 在您的情況下您必須考慮這一點。

1
StreamReader reader = new StreamReader("pathtoyourbinaryfile", System.Text.Encoding.ASCII); 
char[] text = reader.ReadToEnd().ToCharArray(); 
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是更合適的技術。

相關問題