我目前正在创建一个应用程序,它需要将一个浮点值数组保存到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意味着它是一个非规范化的数字,但我不确定这是如何发生的或如何解决它。任何帮助将不胜感激。
答案 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