c# - 从 std::fstream 读取 float 返回负零

标签 c# c++ fstream

我正在尝试用 C++ 重新实现 C# BinaryReader 类的一些方法,现在我被 ReadSingle() method 困住了。 .我有以下代码:

float BinaryReaderClass::ReadSingle() {
    float a;
    _inputStream->read(reinterpret_cast<char*>(&a), sizeof(a));
    return a;
}

我使用示例文件测试了我的代码,它在大多数情况下都能正常工作,除了有时我得到负零,如 -0.000000,而 C# 中的相同函数返回 0.000000。

我真的不明白为什么。

最佳答案

BinaryReader没有做任何不同的事情 - 它只是将内存中的数据解释为 float , 就像 reinterpret_cast .

float 有符号。与整数不同,有两个 个零(与整数的补码一样)- 一个 -0f , 另一个 +0f .但是,当您调用 ToString-0f在 C# 中,你得到 0因此。另外,-0f == 0f .

区分这两个零的一种方法与它们应该如何使用有关:

1f / 0f == PositiveInfinity
1f / -0f == NegativeInfinity

于是尝试在C#中获取float值并将其作为分母。如果它实际上是 -0f , 它应该给你 NegativeInfinity而不是 PositiveInfinity .

关于c# - 从 std::fstream 读取 float 返回负零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266160/

相关文章:

c# - 用于检查 url 和共享文件路径的正则表达式

c++ - SDL 2 BMP block 传输

c# - 使用 .net 4.0 引用 Windows shell 接口(interface)

c# - ASP.NET MVC 3.0 中的状态模式

c# - 编译器不应允许 Guid == null

c++ - 我应该使用 CFPlugin 还是 dlopen() 作为 OSX 上的 C++ 插件

c++ - 如何将模板参数中的函数或成员函数指针转换为函数类?

C++ fstream 混淆

c++ - 读取单词到文件 C++

c++ - fstream 不创建新文件