天天看點

關于SimpleMsgPack中swap引發的問題大端法和小端法研究筆記

今天diocp裙中[珠海]-芒果反應了一個關于SimpleMsgPack的問題

msgPack.AsFloat = 2.507182;

經過編碼再解碼後,會直接觸發異常。

因為msgPack的标準,在打包的資料是大端法IEEE 754

下面是msgPack的标準說明

小端法變大端法把自己順序調整下就好了

在SimpleMsgPack中有一個這樣的函數,可以對Double類型的資料進行交換位元組數。

然後我重載了一些函數 這個函數對傳入的Double進行交換位元組然後傳回Double類型

上面這個浮點資料 2.507182,經過交換後 如果仍然用Double類型來存放會是一個NaN, 會觸發一個無效的浮點型資料的異常。因為不符合小端法的IEEE規則。

經過稍微修改後正常

傳回的值用Int64來存放這樣就好了。

注意不要把一個不是Double類型的資料直接強制轉換成Double類型,因為Double是有标準位元組格式的,當然Single一樣。

繼續閱讀