今天diocp裙中[珠海]-芒果反應了一個關于SimpleMsgPack的問題
msgPack.AsFloat = 2.507182;
經過編碼再解碼後,會直接觸發異常。
因為msgPack的标準,在打包的資料是大端法IEEE 754
下面是msgPack的标準說明
小端法變大端法把自己順序調整下就好了
在SimpleMsgPack中有一個這樣的函數,可以對Double類型的資料進行交換位元組數。
然後我重載了一些函數 這個函數對傳入的Double進行交換位元組然後傳回Double類型
上面這個浮點資料 2.507182,經過交換後 如果仍然用Double類型來存放會是一個NaN, 會觸發一個無效的浮點型資料的異常。因為不符合小端法的IEEE規則。
經過稍微修改後正常
傳回的值用Int64來存放這樣就好了。
注意不要把一個不是Double類型的資料直接強制轉換成Double類型,因為Double是有标準位元組格式的,當然Single一樣。