【问题标题】:Convert Matlab produced string binary to float将 Matlab 生成的字符串二进制转换为浮点数
【发布时间】:2015-12-28 00:22:52
【问题描述】:

我正在寻找一种正确的方法来解码 C++ 中的 64 位二进制文​​件,使用 Matlab(我不熟悉)编码:

reshape(dec2bin(typecast(number,'uint8'),8).',1,[])

其中“数字”是一个浮点数(负数或正数)

产生类似1100001011000000011100111110111111100001100100101110100000111111的东西


我尝试了不同的方法来解码二进制文件,例如:

double bitstring_to_double(const char* p)
{
    unsigned long long x = 0;
    for (; *p; ++p)
    {
        x = (x << 1) + (*p - '0');
    }
    double d;
    memcpy(&d, &x, 8);
    return d;
}

但我得到了巨大的值,例如,-1.21694e+118

【问题讨论】:

  • 您是从哪里获得进行此转换的代码的? C++ 没有固定的浮点数据格式,但通常遵循 IEEE 约定。除非您知道这些位代表什么,以及您的 C++ 编译器代表 double 的格式,否则您应该首先寻找 Matlab 或其他库函数来完成这项工作。
  • @PaulMcKenzie 你的意思是 Matlab 中的转换?我只知道二进制文件应该对应于 -10 到 10 之间的实际值
  • 这可能会有所帮助:cprogramto.com/c-program-convert-binary-float 为什么不在 Matlab 中显示浮点数?
  • @Untitled123 相同的“大”结果
  • 如果 Matlab 给您同样的大数字,那么您可能需要调查这些数字是否生成正确。

标签: c++ matlab encoding binary


【解决方案1】:

如果我错了,请纠正我,但我在函数中的任何地方都看不到参数 s 的用法。假设 p 以某种方式代表 s,则此循环是无限的,因为您永远不会更新 *p 以消耗 s 的最后一个字符。

【讨论】:

  • 我的错,它是 p 而不是 s。改变了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2011-05-18
  • 2021-10-12
  • 1970-01-01
  • 2011-11-25
  • 2020-10-17
相关资源
最近更新 更多