0

我正在讀取二進制數據,該數據可能由Big Endian字節順序中的64位浮點數(「雙精度」)組成。我使用NSData的getBytes:range:方法分別將它們讀入Float64類型的緩衝區。現在我想將字節順序改爲Little Endian。對於整數,使用Core-Foundation函數CFSwapIntXX()很容易實現,其中XX是位數。但是沒有相應的浮動方法。什麼是這樣做的首選方式?交換雙精度值的字節順序

我試圖「強制」一個64位double作爲CFSwapInt64()函數的參數,方法是先將其複製到int64_t變量中,然後再返回到double值。它工作正常,但這對我來說似乎相當殘酷。標準框架沒有任何方法嗎?

回答

1

對浮動的直接支持使用獨立於平臺的格式,請參閱Byte Order Utilities。然而,你正在做的方式很好,交換函數中的「整數」是不相關的 - 函數在很多字節上運行,不管這些字節將如何解釋。

爲了避免您可以使用union醜陋字節副本:

typedef union { Float64 floatValue; int64_t intValue; } FloatBuffer; 

填寫這和字節交換它使用intValue域,並使用floatValue場地讀出值。