Я новичок в 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. Заранее спасибо