首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中解开CBOR解码数据

在Swift中解开CBOR解码数据
EN

Stack Overflow用户
提问于 2020-03-12 01:42:20
回答 2查看 368关注 0票数 0

我在Swift中有关注结构

代码语言:javascript
复制
struct SerializableRequest {        
  var r: Int
  var m: String
  var d: String
  var b: [UInt8]
}

然后我创建了一个struct的实例:

代码语言:javascript
复制
SerializableRequest(r: 1, m: "c", d:"l", b: [42, 24] ) 

并使用CBOR对其进行编码: 164,97,109,97,99,97,98,66,42,24,97,100,97,108,97,114,1

现在,我想再次使用上面的字节数组将其解码回Struct,但在解码时会产生输出

代码语言:javascript
复制
([SwiftCBOR.CBOR.utf8String("d"): SwiftCBOR.CBOR.utf8String("l"), 
  SwiftCBOR.CBOR.utf8String("r"): SwiftCBOR.CBOR.unsignedInt(1), 
  SwiftCBOR.CBOR.utf8String("b"): SwiftCBOR.CBOR.byteString([42, 24]), 
  SwiftCBOR.CBOR.utf8String("m"): SwiftCBOR.CBOR.utf8String("c")]
)

如何使用https://github.com/myfreeweb/SwiftCBOR进行模式匹配来获取结构

EN

回答 2

Stack Overflow用户

发布于 2020-03-12 02:27:25

我读过SwiftCBOR文档,我想你可以这样使用它:

代码语言:javascript
复制
struct SerializableRequest {
    var r: Int
    var m: String
    var d: String
    var b: [UInt8]

    init(cborArr: [CBOR]) {

        for (i, val) in cborArr.enumerated() {
            if i == 0 {
               //
            } else if i == 1 {
                if case let CBOR.utf8String(string) = val {
                    m = string
                }
            } else if (i == 2) {
                // and so on
            }
        }
    }
}

正如你在上面看到的,我知道在第一个位置有一个字符串,所以我通过cborArr枚举,检查每一项的位置并尝试解码值(因为我期望在第一个位置是字符串)。此外,您还可以使用CodableCBORDecoder、check this out

票数 0
EN

Stack Overflow用户

发布于 2021-07-03 21:26:37

试试这个简单的例子

代码语言:javascript
复制
import Foundation
import SwiftCBOR

struct S: Codable {
    let integer: Int
    let string: String
    let byteArray: [UInt8]
}

let s1 = S(integer: 1, string: "Hello, World", byteArray: [1,2,255])


do {
    let encoder = CodableCBOREncoder()
    // encoded Data
    let data = try encoder.encode(s1)
    
    let decoder = CodableCBORDecoder()
    // decoded S
    let s2 = try decoder.decode(S.self, from: data)
    
    print(s2)
    // S(integer: 1, string: "Hello, World", byteArray: [1, 2, 255])

    
} catch {
    print(error)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60641753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档