2012-06-29 72 views
1

我有一个二进制文件,用C语言编写,其中包含一串长长的数字。 首先它包含4次int(因此前16个字节是4个整数),然后它包含双精度(我假设每8个字节有一个新的双精度)。用C语言格式化读取文件#

在任何点或其他地方都没有空格。现在我需要用C#读取数据,但到目前为止,我所尝试的所有内容都无效,有什么建议吗?

+6

你试过了什么? –

+2

对于那些不熟悉C语言的人来说,这是一个二进制文件而不是文本文件?如果是这样的http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx可能会有所帮助... H有用的方法,如ReadInt32等... – Chris

+0

首先,我试图打开文件'FileStream'并使用'fs.Read(byte [4],0,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,则数据的前四个字节将为0x00000001,接下来的四个字节将为0x00000929。 – user1004959