0

我正在读取可能由 Big Endian 字节顺序中的 64 位浮点数(“双精度数”)组成的二进制数据。我使用 NSData 的 getBytes:range: 方法将它们单独读入 Float64 类型的缓冲区。现在我想将字节顺序更改为 Little Endian。对于整数,使用 Core-Foundation 函数 CFSwapIntXX() 可以轻松实现,其中 XX 是位数。但是浮点数没有对应的方法。这样做的首选方法是什么?

我试图通过先前将其复制到 int64_t 变量然后再次返回到 double 值来“强制”将 64 位 double 作为函数 CFSwapInt64() 的参数。它工作正常,但这对我来说似乎相当残酷。标准框架没有自带方法吗?

4

1 回答 1

1

对浮点数的直接支持使用与平台无关的格式,请参阅Byte Order Utilities。然而,你这样做的方式很好,交换函数中的“整数”是不相关的——无论这些字节将如何解释,这些函数都对这么多字节进行操作。

为了避免丑陋的字节副本,您可以使用union

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

使用该字段填充它并对其进行字节交换,并使用该intValue字段读出值floatValue

于 2012-10-04T02:30:51.140 回答