typealias Byte = UInt8
func toByteArray<T>(var value: T) -> [Byte] { return withUnsafePointer(&value) { Array(UnsafeBufferPointer(start: UnsafePointer<Byte>($0), count: sizeof(T))) }}toByteArray(1729.1729)toByteArray(1729.1729 as Float)toByteArray(1729)toByteArray(-1729)但是结果与您的期望相反(由于字节顺序):
[234, 149, 178, 12, 177, 4, 155, 64][136, 37, 216, 68][193, 6, 0, 0, 0, 0, 0, 0][63, 249, 255, 255, 255, 255, 255, 255]
添加:
func fromByteArray<T>(value: [Byte], _: T.Type) -> T { return value.withUnsafeBufferPointer { return UnsafePointer<T>($0.baseAddress).memory }}let a: Double = 1729.1729let b = toByteArray(a) // -> [234, 149, 178, 12, 177, 4, 155, 64]let c = fromByteArray(b, Double.self) // -> 1729.1729对于Xpre8 / Swift3.0:
func toByteArray<T>(_ value: T) -> [UInt8] { var value = value return withUnsafePointer(to: &value) { $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout<T>.size) { Array(UnsafeBufferPointer(start: $0, count: MemoryLayout<T>.size)) } }}func fromByteArray<T>(_ value: [UInt8], _: T.Type) -> T { return value.withUnsafeBufferPointer { $0.baseAddress!.withMemoryRebound(to: T.self, capacity: 1) { $0.pointee } }}对于Xpre8.1 / Swift3.0.1
func toByteArray<T>(_ value: T) -> [UInt8] { var value = value return withUnsafeBytes(of: &value) { Array($0) }}func fromByteArray<T>(_ value: [UInt8], _: T.Type) -> T { return value.withUnsafeBytes { $0.baseAddress!.load(as: T.self) }}


