将浮点数保存到C#中的二进制文件并在C

时间:2016-02-06 00:51:49

标签: c# c floating-point

我目前正在创建一个应用程序,它需要将一个浮点值数组保存到C#中的二进制文件中,然后打开相同的二进制文件并检索C程序中的值。

我在C#中使用BinaryWriter

binaryWriter.Write(myFloatVar); 

我在C中使用fread

fread(&myfloat, sizeof(float), 1, file);

对于大多数人来说它工作得很好,但是当试图特定值时,输出结果很奇怪。通过debuging在C#端输入为0.6045232,但是当它在C程序端检索时,它显示为6.961e-041#DEN

我知道DEN意味着它是一个非规范化的数字,但我不确定这是如何发生的或如何解决它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

大多数FP工作正常的常见情况,特别是在MS世界中,其中一个文件以文本模式运行,另一个文件模式运行。

对于C方,确保文件以二进制文件打开

// FILE *istream = fopen(fileanme, "r");  // r
FILE *istream = fopen(fileanme, "rb");    // rb

也检查C#方。

实施例

int main(void) {
  union {
      float f;
      uint32_t u32;
  } u;
  u.f = 0.60452329;
  printf("0x%08lX %.9e\n", (unsigned long) u.u32, u.f);
  return 0;
}

输出

//      \n  Gets converted to \r\n and messes up the rest of the file
//      vv
0x3F1AC20A 6.045233011e-01

答案 1 :(得分:1)

同意上面的评论,这个例子使用ASCII,而不是二进制,但这里有一个非常简单的(没有错误检查或处理)如何在C#中将float写入文件,并使用ANSI C读回来的示例:

undefined