Double在内存中使用8个字节表示。我相信这8个字节应该有两个组成部分,一个是整数部分,一个是分数部分(如果我在这个假设中错了,请纠正我)。我的机器有点终端(现在每台Macmini都是)。我希望将表示Double的这8个字节传输到一个文件中,该文件在BigEndian平台上应该是可读的(特别是JVM )。
对于普通整数来说,逆转字节顺序是安全的,因为它们没有组件,而且是原子的。
考虑到Double有两个组件,简单地反转字节顺序是安全的吗?如果不安全,如何将LittleEndian数据表示为BidEndian数据?
另外,我需要读取一个包含BigEndian数据的文件,并在我的LittleEndian机器上将其转换为Double。正好相反的情况。
发布于 2019-05-16 11:52:38
有一个bitPattern方法作为整数获取浮点值的位模式,还有一个用于反向转换的Double(bitPattern:)初始化器。从文件中:
比特模式与IEEE 754规范定义的二进制交换格式相匹配。
因此--假设JVM使用相同的IEEE 754二进制交换格式--以下内容是安全的:
let x = 12.34
// Double to binary interchange format (big endian):
let data = withUnsafeBytes(of: x.bitPattern.bigEndian) { Data($0) }相反的方向:
// Binary interchange format (big endian) to Double:
let y = data.withUnsafeBytes { Double(bitPattern: UInt64(bigEndian: $0.load(as: UInt64.self))) }https://stackoverflow.com/questions/56167127
复制相似问题