Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中读取用C格式化的文件#_C#_C_File_Formatted - Fatal编程技术网

C# 在C中读取用C格式化的文件#

C# 在C中读取用C格式化的文件#,c#,c,file,formatted,C#,C,File,Formatted,我有一个二进制文件,它是用C编写的,其中包含一个很长的数字流。 首先它包含一个整数的4倍(因此前16个字节是4个整数),然后它包含一个双精度(我假设每8个字节一个新的双精度) 在任何点或任何其他地方都没有空格。现在我需要用C读取数据#但到目前为止,我尝试的一切都不起作用,有什么建议吗?你尝试了什么?对于那些不熟悉C的人来说,这是说它是二进制文件而不是文本文件吗?如果可以的话。。。有一些有用的方法,比如ReadInt32等等……首先我尝试用FileStream打开文件,并使用fs.Read(byt

我有一个二进制文件,它是用C编写的,其中包含一个很长的数字流。 首先它包含一个整数的4倍(因此前16个字节是4个整数),然后它包含一个双精度(我假设每8个字节一个新的双精度)


在任何点或任何其他地方都没有空格。现在我需要用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();
  ...
}