2010-03-11 12 views
21

파일을 가져 와서 0과 1, 즉 이진 코드의 배열로 읽는 메소드를 만들고 싶습니다. 그 바이너리 코드를 텍스트 파일로 저장하려고합니다. 너 나 좀 도와 줄 수있어? 감사.C#에서 파일 바이너리를 읽는 방법?

+0

귀하의 질문이 명확하지 않다. 정확히 두 파일이 어떻게 생겼을 까? – SLaks

+0

나는 그가 파일의 비트 패턴을 텍스트 파일에 저장하려고한다고 생각한다. – Oded

+0

원본 파일이 이진이거나 인코딩되어 있습니까 (ASCII, UTF-8, UTF-16 등의 텍스트 형식)? 즉, 메모장과 같은 텍스트 편집기에서 파일을 여는 경우 0과 1이 표시됩니까? – Pat

답변

40

신속하고 더러운 버전으로 인쇄 :

byte[] fileBytes = File.ReadAllBytes(inputFilename); 
StringBuilder sb = new StringBuilder(); 

foreach(byte b in fileBytes) 
{ 
    sb.Append(Convert.ToString(b, 2).PadLeft(8, '0')); 
} 

File.WriteAllText(outputFilename, sb.ToString()); 
+1

@Andrey : "빠르고 더러운"을 참조하십시오. 분명히, 프로덕션에서는 파일 스트림을 사용하는 것이 훨씬 더 좋을 것입니다. 중요한 부분은 바이트에서 이진 문자열로 변환하는 것입니다. –

12

음, 읽기는 어렵지 않습니다. FileStream을 사용하여 바이트 []를 읽으십시오. 텍스트로 변환하는 것은 1과 0을 16 진수로 변환하지 않으면 일반적으로 가능하거나 의미가 없습니다. BitConverter.ToString (byte []) 오버로드로 쉽게 할 수 있습니다. 일반적으로 각 행에 16 또는 32 바이트를 덤프하려고합니다. Encoding.ASCII.GetString()을 사용하여 바이트를 문자로 변환 할 수 있습니다. 이 작업을 수행 샘플 프로그램 :

using System; 
using System.IO; 
using System.Text; 

class Program { 
    static void Main(string[] args) { 
     // Read the file into <bits> 
     var fs = new FileStream(@"c:\temp\test.bin", FileMode.Open); 
     var len = (int)fs.Length; 
     var bits = new byte[len]; 
     fs.Read(bits, 0, len); 
     // Dump 16 bytes per line 
     for (int ix = 0; ix < len; ix += 16) { 
      var cnt = Math.Min(16, len - ix); 
      var line = new byte[cnt]; 
      Array.Copy(bits, ix, line, 0, cnt); 
      // Write address + hex + ascii 
      Console.Write("{0:X6} ", ix); 
      Console.Write(BitConverter.ToString(line)); 
      Console.Write(" "); 
      // Convert non-ascii characters to . 
      for (int jx = 0; jx < cnt; ++jx) 
       if (line[jx] < 0x20 || line[jx] > 0x7f) line[jx] = (byte)'.'; 
      Console.WriteLine(Encoding.ASCII.GetString(line)); 
     } 
     Console.ReadLine(); 
    } 
} 
+0

답변 해 주셔서 감사합니다. 흠 .. 0과 1을 얻지 못해 무언가가 작동하지 않는 것 같습니다. 대신 메모장에서 파일을 열어 본 것과 같은 효과를 얻고 있습니다. – Boris

+0

예, 그들은 16 진수로 인코딩됩니다. 메모장에서 볼 수있는 것과 같은 것이 아닙니다. Backgrounder : http://en.wikipedia.org/wiki/Hexadecimal –

+0

이 메서드는 파일을 읽습니다. 이진 파일을 파일에 쓰거나 이진 데이터를 파일에 쓰고 다음을 16 진수로 변환하는 메서드를 제공 할 수 있습니까? 여기 있니? – shawn

4

각이 진에 표시되는 방법을 찾아 BitConverter.ToString(byte[])를 사용하여 다음 바이트의 각을 읽을 BinaryReader를 사용할 수 있습니다.

그러면이 표현과 파일에 write을 사용할 수 있습니다.

+0

답변 해 주셔서 감사합니다. – Boris

3

사용은 간단 FileStream.Read 다음 Convert.ToString(b, 2)

+0

답장을 보내 주셔서 감사합니다. – Boris

관련 문제