簡體   English   中英

C / C ++-將浮點數轉換為字節數組,以便字節保留順序

[英]C/C++ - converting a float to byte array such that bytes preserve ordering

有沒有一種方法可以將float轉換為unsigned char fbytes[8] ,使得:

如果浮點值f1 < f2 ,則對於0 <= i <= 7 ?, fbytes1[i]絕不應該大於fbytes2[i]

其背后的目的是序列化並存儲浮點數,並且仍然能夠通過逐字節比較來進行比較。 例如,即使浮點數存儲為原始字節,我也可以通過簡單的字節比較對行進行排序,並且仍然保留順序。

如果您忽略NAN(NAN總是比較不等於所有事物,包括它們自己),這很簡單。 否則,這是不可能的。

首先,直接轉換為大端字節數組。

符號位是第一個字節的高位。 接下來的幾位是指數,然后是尾數。

如果未設置符號位,請對其進行設置,以使所有正數排在所有負數之后。

否則,將~運算符應用於所有字節(或者在將其全部打包為單個整數時執行此操作-為什么仍然需要字節?)。 這將顛倒負數內的排序順序,並將它們移到正數之下。

您可能還希望合並零(如果在任何地方設置的唯一位是符號位,請將其清除)。

如果您的浮點實現使用IEEE-754(大多數情況下),則可以利用一個微妙的設計點:如果將IEEE浮點值的位視為整數值的符號幅度表示,通常該值的排序比較將與浮點值的相應比較提供完全相同的順序, 在存在NaN時提供一致的排序(正NaN大於無窮大,負NaN小於-無窮大)。 因此,請檢查符號位:如果它們不同,則正號較大;否則,正號較大。 如果它們相同,則將其余部分視為整數值進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM