今天diocp裙中[珠海]-芒果反应了一个关于SimpleMsgPack的问题
msgPack.AsFloat = 2.507182;
经过编码再解码后,会直接触发异常。
因为msgPack的标准,在打包的数据是大端法IEEE 754
下面是msgPack的标准说明
小端法变大端法把自己顺序调整下就好了
在SimpleMsgPack中有一个这样的函数,可以对Double类型的数据进行交换字节数。
然后我重载了一些函数 这个函数对传入的Double进行交换字节然后返回Double类型
上面这个浮点数据 2.507182,经过交换后 如果仍然用Double类型来存放会是一个NaN, 会触发一个无效的浮点型数据的异常。因为不符合小端法的IEEE规则。
经过稍微修改后正常
返回的值用Int64来存放这样就好了。
注意不要把一个不是Double类型的数据直接强制转换成Double类型,因为Double是有标准字节格式的,当然Single一样。