【发布时间】: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