2009-05-29 3 views
0

이진 파일을 ascii charcters 배열로 변환하고 싶습니다. 내가 어떻게 할 수 있니? 감사합니다.어떻게 바이너리 파일을 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 인코딩은 놀랄만 한 놀라움을 가져올 수 있습니다. (그 중 null은 인쇄 할 수없는 문자입니다 ...)

바이트 배열에서 인쇄 할 수있는 것을 갖고 싶다면 ASCII 인코딩으로 변환해서는 안됩니다. Base64로 인코딩하는 것이 좋습니다. Base64는 문자열에서 이진 코드를 인코딩하는 데 안전하지 않습니다 (크기가 적당하지는 않지만). 앞서 대응이 질문에 대답 믿을 수 없어

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

True, Base64 문자열을 ASCII는 안전하며 인쇄 가능한 문자로만 나타납니다. – PeterAllenWebb

0

각 문자를 읽고 문자로 전송할 수 있습니다. 그러면 모든 바이트가 ASCII 문자로 변환됩니다. 그게 당신이하려는 것입니까?

2

BASE64 또는 UUEncoding을 확인하십시오. 필자는 256 문자 ASCII 세트의 인쇄 가능한 문자 만 사용하려고한다고 가정합니다.

BASE64는 64 문자 만 사용합니다 (예 : 이메일을 통해 바이너리를 보낼 때 사용되는 경우도 있음). 결과적으로 출력이 커지기 때문에 상황에 따라 고려해야합니다.

+0

을 생각 나게합니다. C#에서 Convert.ToBase64String()을 사용하면이 작업을 간단하게 수행 할 수 있습니다 – PeterAllenWebb

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

:

가 Base64로에 바이트를 인코딩하기 위해, 당신은 단지와 함께 갈 수 있습니다. 많은 사람들이 바이트를 의미 할 때 ASCII라고 말합니다. 그래서 질문자가 인코딩 된 문자가있는 텍스트 파일이 아닌 바이너리 파일을 읽길 원했다고 의심합니다.

난 다음 문자열에서 UTF-8 텍스트 파일을 생성 다른 기술의 영향을 증명 :

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

다음 프로그램은 바이트들의 배열로서 다음 텍스트 문자열로 먼저 파일을 판독한다. 각각의 경우에 그것은 십진수로 입력을 먼저 표시 한 다음 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을받습니다.

질문자가 유니 코드 텍스트 파일보다는 정품 이진 파일을 읽고 싶다고 생각하지만이 예제가 두 기술의 효과를 더 잘 보여주고 질문자가 이진 파일을 읽으려는 경우 ReadAllBytes가 더 적절한 기술.