我需要能够从 C++ 中的二进制数据中读取浮点数或双精度数,类似于 Python 的struct.unpack
函数。我的问题是我收到的数据总是大端的。我已经处理了这里描述的整数值,但是逐字节工作不适用于浮点值。我需要一种在 C++ 中提取浮点值(32 位float
和 64 位double
)的方法,类似于您在 Python 中的使用struct.unpack(">f", num)
方式。struct.unpack(">d", num)
这是我尝试过的一个例子:
stuct.unpack("d", num) ==> *(double*) str; // if str is a char* containing the data
如果是 little-endian,那效果很好str
,但如果它是 big-endian,就不行,因为我知道它永远都是。问题是我不知道环境的原生字节序是什么,所以我需要能够始终将二进制数据提取为大字节序。
如果您查看链接的问题,您会发现这很容易对整数值使用按位或移位,但该方法不适用于浮点。
注意我应该早点指出这一点,但我不能使用 c++11 或 Boost 以外的任何第三方库。