往返數據的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條經驗 獲得超6個贊
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 關注
- 574 瀏覽
添加回答
舉報
0/150
提交
取消