2012-06-29 2 views
1

길이가 긴 스트림이 포함 된 C로 작성된 이진 파일이 있습니다. 처음에는 int에 4 번 (처음 16 바이트가 4 int) 4 배가 포함 된 다음 두 배가 포함됩니다 (8 바이트마다 새 double이 있다고 가정 함).C로 포맷 된 파일 읽기 C#에서

어떤 지점이나 다른 곳에 공백이 없습니다. 이제는 C#으로 데이터를 읽을 필요가 있습니다. 그러나 지금까지 시도한 모든 것은 간단하게 작동하지 않았습니다.

+6

당신은 무엇을 시도 했습니까? –

+2

C에 익숙하지 않은 분들은 텍스트 파일이 아닌 이진 파일이라는 말입니까? 그렇다면 http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx가 도움이 될 수 있습니다 ... ReadInt32와 같은 유용한 메소드가 있습니다. – Chris

+0

먼저 파일을 열려고 시도했습니다. 'FileStream'을 호출하고'fs.Read (byte [4], 0, 4)'를 사용하여 처음 4 바이트를 배열로 읽어 들인 다음'BitConverter.ToInt32 (byte [4], int)'를 사용하여 int. 'char [4]'를 사용하여'StreamReader'를 사용해 보았습니다. 그러나 역시 동작하지 않았습니다. – phil13131

답변

5
using (BinaryReader br = new BinaryReader(File.Open("file", FileMode.Open))) 
{ 
    int a = br.ReadInt32(); 
    int b = br.ReadInt32(); 
    int c = br.ReadInt32(); 
    int d = br.ReadInt32(); 
    double e = br.ReadDouble(); 
    double f = br.ReadDouble(); 
    ... 
} 
+1

이것은 바이너리 파일에서는 작동하지만'fprintf'에서는 숫자를 텍스트로 출력하지 않습니다. –

+0

감사의 말은 쉬운 방법이며 완벽하게 작동합니다. – phil13131

+0

텍스트 파일이기 때문에. 명확하게 말하자면,이 텍스트 "12345"를 알려줍니다. 이 텍스트가 실제로 두 개의 정수가 합쳐 졌다고 말하면 제가 12와 345 또는 123과 45에 합류했는지 여부를 말해 줄 수 있습니까? 이 텍스트 파일에서 데이터의 첫 번째 바이트는 문자 코드 1이되고 두 번째 바이트는 문자 코드 2가됩니다. 또는 인코딩에 따라 문자 당 두 개 이상의 바이트 수 있습니다. 하지만 이진 파일이고 정수 1과 2345를 쓰면 처음 4 바이트의 데이터는 0x00000001이고 다음 4 바이트는 0x00000929가됩니다. – user1004959