2017-03-14 6 views
0

Ich bin neu in der Programmierung, und ich habe einen vorgefertigten Code, wo ein Teil der Berechnung auf der Extraktion einiger Informationen aus BLOB-Dateien Ich denke, ich habe den Platz im Code gefunden , wo die Information gelesen wird, aber ich verstehe es nicht:BLOB, wie funktioniert es

unsigned short decode_le16(byte *buf) { 
    return buf[0] | (buf[1] << 8); 
} 


unsigned int decode_le32(byte *buf) { 
    return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); 
} 

die Blob enthalten Zeichen und Zahlen, aber wie wird diese Information lesen? Und wie kann ich die Struktur des BLOB ohne vorherige Kenntnis des Layouts sehen?

+3

Der Code, den Sie gezeigt haben, dient nur zum Lesen und Konvertieren von Binärdaten mit entgegengesetzter Endianz - das hat nichts mit BLOBs * per se * zu tun. Beachten Sie, dass ein [BLOB] (https://en.wikipedia.org/wiki/Binary_large_object) ein allgemeiner Begriff für einen Block binärer Daten ist, und ohne weitere Informationen glaube ich nicht, dass Ihnen jemand weitere Einzelheiten nennen kann. –

+0

Okay, aber ich bin ziemlich sicher, dass diese beiden Funktionen verwendet werden, um aus dem BLOB zu lesen. Das BLOB ist eine Binärdatei, habe ich recht? Aber wenn ich nicht vorher weiß, wie es komprimiert ist, wie kann ich einen Überblick darüber bekommen? Wie es sich lohnt, eine Papier-ID, eine Reihe von Papierzitaten, Referenzen usw. zu enthalten, aber wie kann ich einen Überblick darüber bekommen, damit ich anfangen kann, den Code zu ändern? – 1233023

+0

@ 1233023 in der Tat brauchen Sie einige Informationen, was im BLOB tatsächlich gespeichert ist, um es interpretieren zu können. –

Antwort

2

decode_le16

"le" steht für little endian. 16 ist die Größe in Bits. Dieser Code benötigt zwei (8 Bit) Bytes und kombiniert sie zu einer 16-Bit-Ganzzahl unter Verwendung von Verschiebe- und bitweisen OR-Operationen, einer ziemlich standardisierten Methode zum Decodieren von endianitätsunabhängigen Binärformaten.

, wie diese Informationen lesen

Einige Code nicht in der Frage gezeigt müssen I/O verwenden Datei ein Byte-Array aus einer Datei abzurufen. Diese Anordnung wird dann Stück für Stück Funktionen wie decode_le16 zugeführt. Dann fügt ein anderer Code diese Integer, Zeichen und was nicht in übergeordnete Datenstrukturen zusammen.

Und wie kann ich die Struktur des BLOB ohne vorherige Kenntnis des Layouts sehen?

Sie können nicht, BLOBs sind nicht per Definition strukturiert, sie sind nur Arrays von Bits/Bytes. Wenn Sie es wissen müssen und das Format nicht dokumentiert ist, müssen Sie es rückverfolgen, indem Sie den oben beschriebenen Anwendungscode verfolgen.