Wie zu entschlüsseln protobuf binary Antwort
Habe ich eine test-app, die erkennen können einige Bild mit Goggle-Brille. Es funktioniert für mich, aber ich erhalte binaryt protobuf Antwort. Ich habe keine proto-Dateien, nur binäre Antwort. Wie bekomme ich Daten von ihm? (Geschickt haben, ein Bild mit Flasche und Bär bekam die nex-response):
A
TuborgLogo9 HoaniText���;�)b���2d8e991bff16229f6"�
+TR=T=AQBd6Cl4Kd8:X=OqSEi:S=_rSozFBgfKt5d9b0
+TR=T=6rLQxKE2xdA:X=OqSEi:S=gd6Aqb28X0ltBU9V
+TR=T=uGPf9zJDWe0:X=OqSEi:S=32zTfdIOdI6kuUTa
+TR=T=RLkVoGVd92I:X=OqSEi:S=P7yOhvSAOQW6SRHN
+TR=T=J1FMvNmcyMk:X=OqSEi:S=5Z631_rd2ijo_iuf�
brauchen, um string "Tuborg" und-wenn möglich-Typ - "Logo"
Welche Sprachen haben Sie zu Ihrer Verfügung haben? es gibt decoding-stream-Leser zur Verfügung in den meisten Implementierungen. Ich mache mir sorgen, jedoch, darüber, wie die Daten codiert wurde. Sie haben die tatsächliche
Nein, die ist ok. Ich habe gelesen, Antwort als byte [] - array, und es jusrt String-Repräsentation os diese Daten. Unten ist eine andere Antwort für das Bild mit Steve Jobs-name: Z-Steve Jobs Text # Manifest da Morto Ähnliches Image???;?~Ui4{C~27e437b3469557e98"? +TR=T=2NKSRNijdzY:X=Op9HS:S=Q5E2GgGTn2FHbvXR +TR=T=-hAbOrM2yME:X=Op9HS:S=XJ0SUV2EWG1A2Z7O +TR=T=4fEn46Y2-xM:X=Op9HS:S=xIk9lP93EkhBQroz +TR=T=-s6bJFuLuRo:X=Op9HS:S=cPnqT3_nWM61zYnv +TR=T=2hSkrpEoO10:X=Op9HS:S=jsH5Uv1-X9WMQNoN?
"jusrt String-Repräsentation os diese Daten" nur "string-Repräsentationen", das könnte Sinn machen, hier: base-64-oder hex-Codierung. Es sieht aus wie Sie ausgeführt, dass durch UTF-8 oder etwas, was ungültig und verlieren Daten. Auch, und ich wiederhole: was für Sprachen haben Sie zu Ihrer Verfügung haben?
Ich bin mit JAVA, hier ist der link zu meinem code (konvertiert von C# - Beispiel) prodroid.com.ua/?p=385 vielen Dank!
wenn die Antwort ist, binäre, Sie nicht verwenden
byte[]
Daten? (Ich bitte wieder die Frage, wie das aussieht, wie schlecht codiert (aka korrupt) Daten)Nein, die ist ok. Ich habe gelesen, Antwort als byte [] - array, und es jusrt String-Repräsentation os diese Daten. Unten ist eine andere Antwort für das Bild mit Steve Jobs-name: Z-Steve Jobs Text # Manifest da Morto Ähnliches Image???;?~Ui4{C~27e437b3469557e98"? +TR=T=2NKSRNijdzY:X=Op9HS:S=Q5E2GgGTn2FHbvXR +TR=T=-hAbOrM2yME:X=Op9HS:S=XJ0SUV2EWG1A2Z7O +TR=T=4fEn46Y2-xM:X=Op9HS:S=xIk9lP93EkhBQroz +TR=T=-s6bJFuLuRo:X=Op9HS:S=cPnqT3_nWM61zYnv +TR=T=2hSkrpEoO10:X=Op9HS:S=jsH5Uv1-X9WMQNoN?
"jusrt String-Repräsentation os diese Daten" nur "string-Repräsentationen", das könnte Sinn machen, hier: base-64-oder hex-Codierung. Es sieht aus wie Sie ausgeführt, dass durch UTF-8 oder etwas, was ungültig und verlieren Daten. Auch, und ich wiederhole: was für Sprachen haben Sie zu Ihrer Verfügung haben?
Ich bin mit JAVA, hier ist der link zu meinem code (konvertiert von C# - Beispiel) prodroid.com.ua/?p=385 vielen Dank!
wenn die Antwort ist, binäre, Sie nicht verwenden
readLine
- das ist falsch und völlig korrupten Daten. Sie muss Lesen Sie wie binary.InformationsquelleAutor Igor | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dekodieren mit
protoc
:suchen Sie für java-Beispiel im protobuf-API.
InformationsquelleAutor To1ne
Dies wird Ihnen zeigen, die top-level-Felder. Leider kann Sie nicht wissen, die genauen details der Feld-Typen. long/int/bool/enum etc sind alle codiert, wie Varint und alle gleich Aussehen. Strings, byte-arrays und sub-Nachrichten, in der Länge getrennt und sind auch nicht zu unterscheiden.
Einige nützliche details hier: https://github.com/dcodeIO/protobuf.js/wiki/How-to-reverse-engineer-a-buffer-by-hand
Wenn Sie Folgen Sie den code in der UnknownFieldSet.mergeFrom() sehen Sie, wie Sie könnten versuchen, zu entschlüsseln sub-Nachrichten, und fallen wieder zurück an die Saiten, wenn das fehlschlägt - aber es ist nicht sehr zuverlässig.
Gibt es 2 Ersatz-Werte für die wiretype in der Protokoll - es wäre wirklich hilfreich gewesen, wenn google Sie benutzt hatte, eine dieser zu bezeichnen sub-Nachrichten. (Und die andere für null-Werte vielleicht.)
Hier einige sehr grobe Eilte code versucht, produzieren etwas nützliches für die Diagnose. Er rät, bei der Daten-Arten und im Falle von strings und sub-Nachrichten, gibt es beide Varianten in einigen Fällen. Sie Vertrauen nicht alle Werte ausgegeben:
com.google.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero)
am Eingang.readTag();als eine grobe Schätzung der Stelle, die Sie gerade Lesen, ist nicht der Beginn einer protobuf Nachricht
InformationsquelleAutor AutomatedMike
Gehe ich davon aus, die eigentliche Frage ist, wie zu entschlüsseln protobufs und nicht, wie read binary aus dem Draht mit Java.
Die Antwort auf Ihre Frage finden hier
Kurz, auf den Draht, protobufs codiert werden als 3-Tupel von <key,type,value>, wo der Schlüssel ist die Feld-Nummer ein, um das Feld in der .proto-schema. Der Typ ist einer der <Varint, int32, Länge getrennten, start-Gruppe, end-Gruppe,int64>. Es enthält gerade genug Informationen, die zum decodieren der Wert der 3-Tupel, nämlich es sagt Ihnen, wie lange das Wert ist.
InformationsquelleAutor tgoodhart