Декодировать Protobuf в двоичном формате, используя Swift - PullRequest
1 голос
/ 28 октября 2019

Я новичок в Protobuf и хочу декодировать protobuf (тип синтаксиса 2) в swift. Ниже я делюсь библиотекой, которую я использую в swift

'SwiftProtobuf'

У меня есть один файл прототипа, и с помощью компилятора я сгенерировал один файл proto.pb.swift и добавилчтобы проецировать

Шаг 1. Я получаю данные protobuf в своем приложении, но не могу декодировать это сообщение.

Я использовал следующий код:

// Deserialize a received Data object from `binaryData`
let decodedInfo = try User(serializedData: bytesReceived)

Ниже приведена ссылка, по которой я следую https://medium.com/@dzungnguyen.hcm/protobuf-in-swift-809658ecdb22

Двигаясь вперед, я прошел частичное == true, тогда я могучтобы получить пользовательские данные, но все их значения являются мусором, например: time = -1532154564212 что-то вроде этого

Поэтому я подумал, чтобы проверить его байтовые данные для этого, я использовал ниже строки кодов

let array = bytesReceived.withUnsafeBytes {
                [UInt8](UnsafeBufferPointer(start: $0, count: bytesReceived.count))
            }

Ниже приведено значение массива

[122, 43, 10, 10, 8, 128, 192, 4, 16, 128, 128, 160, 140, 6, 21, 165, 165, 165, 165, 24, 143, 255, 255, 255, 15, 32, 172, 255, 255, 255, 15, 40, 129, 8, .... 160, 140]

Oneмоего друга-разработчика Python уже расшифровал сообщение protobuf ниже, я делюсь его кодом Python

data = bytearray(proto_data)
 length, pos = 0, 0

    # 
    while pos < len(data):
        msg = Myproto.User()              
        # find the position and length of submessage
        length, pos = _DecodeVarint32(data, pos)

        try:
            msg.ParseFromString(data[pos:(pos + length)])
        except:
            pass

        pos += length
        print("Msg: ", msg)

Также

msg.ParseFromString (data [pos: (pos + length)])

Я не понимаю, что именно метод ParseFromString делает в python

Пожалуйста, помогите мне, как мы можем декодировать это сообщение protobuf в Swift. Заранее спасибо

...