往返数据的SWIFT编号类型斯威夫特3倾向于Data而不是[UInt8],我正在尝试找出哪种最有效/惯用的方式将各种数字类型(UInt 8、Double、Float、Int 64等)编码/解码为数据对象。有这是使用[UInt 8]的答案,但它似乎在使用数据上找不到的各种指针API。我想基本上是一些自定义扩展,类似于:let input = 42.13 // implicit Doublelet bytes = input.datalet roundtrip = bytes.to(Double) // --> 42.13真正让我无法理解的是,我已经看过了一堆文档,我是如何得到某种指针的(OpaquePoter,BufferPoter,还是Unsecurity Poter?)从任何基本结构(所有的数字都是)。在C中,我会在它前面打一个符号,然后你就可以了。
3 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
withUnsafePointer
:
withUnsafePointer(&input) { /* $0 is your pointer */ }
红糖糍粑
TA贡献1815条经验 获得超6个赞
extension UInt16 : DataConvertible { init?(data: Data) { guard data.count == MemoryLayout<UInt16>.size else { return nil } self = data.withUnsafeBytes { $0.pointee } } var data: Data { var value = CFSwapInt16HostToBig(self)//Acho que o padrao do IOS 'e LittleEndian, pois os bytes estavao ao contrario return Data(buffer: UnsafeBufferPointer(start: &value, count: 1)) }}
- 3 回答
- 0 关注
- 519 浏览
添加回答
举报
0/150
提交
取消