2009-05-29 3 views
0

バイナリファイルをASCII文字の配列に変換したいと考えています。どうやってやるの 。 ありがとうございます。バイナリファイルをASCIIのcharectersのセットに変換する方法

+0

詳細については、 –

+0

私はあなたが印刷可能な文字について話していると仮定します。すべての256 ASCII文字が印刷可能であるわけではありません。 –

+0

質問は私に思い出させますhttp://en.wikipedia.org/wiki/File:Bird_converted_to_ASCII_characters.png – tanascius

答えて

4

これは、あなたが何をしたいかによって異なります。 Asciiは7ビット(0-127は明確に定義されており、他の文字はコードページに依存しています)とされています。平易なASCIIエンコーディングは、奇妙な驚きにつながる可能性があります(その中には、ヌルなどの非印字可能文字があります)。

バイト配列から印刷可能なものを使用する場合は、ASCIIエンコーディングで変換しないでください。文字列のバイナリをエンコードするのに安全な(サイズはそれほど最適ではありませんが)方法であるBase64でエンコードする方がよいでしょう。私は以前の応答が質問に答えていることを信じていない

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

でC#でこれを行うのは簡単ですが、Base64文字列をASCIIは安全で、結果は印刷可能な文字のみになります。 – PeterAllenWebb

0

各文字を読んで文字にキャストできます。これはすべてのバイトをASCII文字に変換します。それはあなたがやろうとしていることですか?

2

BASE64またはUUEncodingを確認してください。私はあなたが256文字のASCIIセットからの印刷可能な文字だけを使いたいと思っています。

BASE64は64文字しか使用しません(たとえば、バイナリを電子メールで送信する場合など)。これにより、出力が大きくなります。状況に応じて検討する必要があります。

+0

はい、Convert.ToBase64String() – PeterAllenWebb

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

はBase64にあなたのバイトをエンコードするには、あなただけで行くことができます。多くの人がバイトを意味するときにASCIIと言っているので、質問者がエンコードされた文字を含むテキストファイルではなくバイナリファイルを読みたいと思っています。

string s = "\ta£\x0394\x221A"; // tab; lower case a; pound sign; Greek delta; square root 

次のプログラムは、その後バイトの配列として文字列として最初にこのファイルを読み取り:私は次の文字列からUTF-8テキストファイル作成の異なる技術の影響を実証するために

。いずれの場合も、最初に入力を10進数で表示し、次に16進数で表示します。

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文字が入力文字列内の単一の文字になっていることを

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が受信されます。

質問者がUnicodeテキストファイルではなく本物のバイナリファイルを読みたいと思っていますが、この例では2つのテクニックの効果をよりよく説明し、質問者がバイナリファイルを読むことを望むならReadAllBytesがより適切な技術。

関連する問題