C# 在C中读取用C格式化的文件#
我有一个二进制文件,它是用C编写的,其中包含一个很长的数字流。 首先它包含一个整数的4倍(因此前16个字节是4个整数),然后它包含一个双精度(我假设每8个字节一个新的双精度)C# 在C中读取用C格式化的文件#,c#,c,file,formatted,C#,C,File,Formatted,我有一个二进制文件,它是用C编写的,其中包含一个很长的数字流。 首先它包含一个整数的4倍(因此前16个字节是4个整数),然后它包含一个双精度(我假设每8个字节一个新的双精度) 在任何点或任何其他地方都没有空格。现在我需要用C读取数据#但到目前为止,我尝试的一切都不起作用,有什么建议吗?你尝试了什么?对于那些不熟悉C的人来说,这是说它是二进制文件而不是文本文件吗?如果可以的话。。。有一些有用的方法,比如ReadInt32等等……首先我尝试用FileStream打开文件,并使用fs.Read(byt
在任何点或任何其他地方都没有空格。现在我需要用C读取数据#但到目前为止,我尝试的一切都不起作用,有什么建议吗?你尝试了什么?对于那些不熟悉C的人来说,这是说它是二进制文件而不是文本文件吗?如果可以的话。。。有一些有用的方法,比如ReadInt32等等……首先我尝试用
FileStream
打开文件,并使用fs.Read(byte[4],0,4)
将前四个字节读入数组,然后使用BitConverter.ToInt32(byte[4],int)
将其转换为int。我使用char[4]
使用StreamReader
尝试了同样的方法,但也不起作用。从理论上讲,它不应该是一个文本文件,因为它是使用fprintf创建的。如果数字确实是用“%d%d%d%lf%lf…”打印的(没有空格),并且它们的十进制表示长度不同(即不同的位数/数字),如果不是不可能的话,它们是很难分开的。你尝试过什么?对于那些不熟悉C的人来说,这是说它是一个二进制文件而不是一个文本文件吗?如果有帮助的话…有一些有用的方法,比如ReadInt32等等…首先我尝试用FileStream
和fs.Read(byte)打开文件[4] ,0,4)
将前四个字节读入数组,然后使用位转换器.ToInt32(字节[4],int)
将其转换为int。我使用字符[4]用流读取器尝试了同样的方法
但这也不起作用。从理论上讲,它不应该是一个文本文件,因为它是使用fprintf创建的。如果数字确实是用“%d%d%d%lf%lf…”打印的(没有空格),并且十进制表示的长度不同(即不同的位数/数字),如果不是不可能的话,它们是很难分开的。这将适用于二进制文件,但不适用于以文本形式输出数字的fprintf
。因为它们是文本文件。为了清楚起见,我给你这个文本“12345”。如果我告诉你,这段文字实际上是两个整数连接在一起,你能告诉我我是连接了12和345还是123和45吗?在这段文字文件中,数据的第一个字节是字符代码1,第二个字节是字符代码2,依此类推。或者根据编码,每个字符可能有两个或更多字节。但是如果是这样的话一个二进制文件,我在其中写了整数1和2345,数据的前四个字节是0x00000001,接下来的四个字节是0x00000929。上面的注释是为了回答您的问题,为什么这段代码不适用于使用fprintf创建的文件。这将适用于二进制文件,但不适用于输出的fprintf
uts将数字作为文本。因为它们是文本文件。为了清楚起见,让我们假设我给你这个文本“12345”。如果我告诉你,这段文字实际上是两个整数连接在一起,你能告诉我我是连接了12和345还是123和45吗?在这段文字文件中,数据的第一个字节是字符代码1,第二个字节是字符代码2,依此类推。或者根据编码,每个字符可能有两个或更多字节。但是如果是这样的话一个二进制文件,我在其中写了整数1和2345,数据的前四个字节是0x00000001,接下来的四个字节是0x00000929。上面的注释是为了回答您的问题,为什么这段代码不适用于使用fprintf创建的文件。
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();
...
}