亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

往返數據的SWIFT編號類型

往返數據的SWIFT編號類型

桃花長相依 2019-06-29 17:53:37
往返數據的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 */ }

我不知道為不可變對象獲取一個的方法,因為InOut操作符只對可變對象工作。

這一點在您所鏈接的答案中得到了證明。


查看完整回答
反對 回復 2019-06-29
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

就我而言,馬丁R他的回答很有幫助,但結果卻是顛倒過來的。所以我對他的代碼做了一個小小的修改:

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))
    }}

這個問題與LittleEndian和BigEndian有關。


查看完整回答
反對 回復 2019-06-29
  • 3 回答
  • 0 關注
  • 574 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號