Kann mir jemand erklären, was Byte-Stream tatsächlich enthält? Enthält es nur Bytes (Hex-Daten) oder Binärdaten oder englische Buchstaben? Ich bin auch verwirrt über den Begriff "Rohdaten". Wenn jemand mich gebeten hat, "die 4-Byte-Daten umzukehren", was soll ich dann davon ausgehen, dass die Daten Hex-Code oder Binärcode sind?
stream-processing
user2720323
quelle
quelle
Antworten:
Byteströme enthalten auch Bytes. Zerlegt in das, was es eigentlich ist, sind es 8 Bits, die aus Einsen und Nullen bestehen. Wenn es eine Zahl darstellen würde, wäre es eine beliebige Zahl von 0 bis 255 (was, wie ich hinzufügen darf, kein Zufall ist, warum die 4 Zahlen in einer IP-Adresse immer im Bereich von 0 bis 255 liegen). Byte- Streams sind normalerweise hochentwickelte Schnittstellen, die das zugrunde liegende Basis-Byte-Array verbergen sollen, das zum Speichern eines Ringpuffers verwendet wird.
Was zum Teufel bedeutet das? Nun, es könnte eine Textdatei, ein Bild oder einen Live-Videostream darstellen. Was es ist, hängt ganz davon ab, wer es liest. Hex-Repräsentation ist eine andere Art, dasselbe zu sagen, obwohl es manchmal praktischer ist, Bytes in Bezug auf ihre Hex-Repräsentation anstatt Zahlen zu verwalten, aber es ist dasselbe.
Wenn Sie sich auf Rohdaten beziehen, beziehen Sie sich normalerweise auf Bytedaten. Die Daten kommen ohne einen Tag mit der Aufschrift "Ich bin eine Bilddatei!" Normalerweise beschäftigen Sie sich nur dann mit Rohdaten, wenn Sie sich nicht wirklich darum kümmern, was die Daten insgesamt darstellen. Wenn ich zum Beispiel ein Bild in seine Schwarzweiß-Version konvertieren möchte, würde ich sagen, dass ich die Rohdaten eines Bildes lesen und für jeweils 3 gelesene Bytes (was tatsächlich die Darstellung der roten Farbe, die Darstellung der grünen Farbe und die Darstellung von ist) blaue Farbe), addiere seinen Zahlenwert und dividiere durch 3, dann schreibe diesen Wert dreimal. Im Wesentlichen würde ich die Rot-, Grün- und Blau-Werte eines Pixels mitteln und daraus sein graues Äquivalentpixel bilden. Wenn Sie jedoch über das Ausführen von Vorgängen mit Daten auf der Ebene "byteweise" sprechen,
Oder Sie möchten eine Datei in einer Datenbank speichern, werden jedoch aufgefordert, ihre "Rohdaten" in einen Blob-Datentyp einzufügen. Dies bedeutet einfach, die Daten einer Datei in ein großes Byte-Array zu konvertieren, das die Datenbank verstehen und verwalten kann. Sie werden feststellen, dass es sich beim Abrufen dieses Werts aus der Datenbank einfach um ein großes Byte-Array handelt, wie Sie es anfangs für die Datenbank angegeben haben. Wenn diese Daten eine Datei waren, müssen Sie als Programmierer diese Bytedaten neu interpretieren, als würden Sie eine Datei jeweils byteweise lesen.
Wenn Sie jemand bittet, "die 4-Byte-Daten umzukehren", wird davon ausgegangen, dass es sich um eine Big-Endian- oder Little-Endian-Interpretation von Zahlen handelt, bei der Zahlen mit dem höchst- oder niedrigstwertigen Byte beginnen. Es spielt keine Rolle, ob eine Zahl als Big-Endian oder Little-Endian dargestellt wird, nur dass alle Systeme, die die Zahl lesen, sie konsistent interpretieren.
Dies bedeutet nicht, dass die tatsächliche Zahlendarstellung (oder Hexadezimaldarstellung) geändert wird, sondern lediglich, dass die Reihenfolge, in der diese 4 Bytes eine Zahl bilden, umgekehrt werden sollte. Angenommen, Sie haben 0x01, 0x02, 0x03 und 0x04. Um diese umzukehren, müssten Sie stattdessen 0x04, 0x03, 0x02, 0x01. Das System würde diese 4 Bytes vermutlich in umgekehrter Reihenfolge lesen, und da Sie sie bereits umgekehrt haben, wird der Wert so interpretiert, als ob er genau dem entspricht, was in den Rohdaten beabsichtigt war.
Ich hoffe das erklärt es!
quelle
Ein Byte ist einfach eine Informationseinheit - es kann alles sein. Ein Byte an sich hat nichts zu bedeuten, man muss ihm irgendeine Bedeutung beimessen.
Also, um das zu erweitern -
Hex-Daten sind die gleichen wie Binärdaten. Es ist nur eine andere Art, die Daten anzuzeigen. Beispiel: 0x41 = 0b01000001 = 'A' = 65 (dezimal). Englische Buchstaben wären nur eine Teilmenge davon.
Da hex nur eine Darstellung der Daten ist, spielt es keine Rolle, wie Sie darüber denken. Wenn Sie Daten von haben
0x65 0x66 0x67 0x68
, um es umzukehren, würden Sie erhalten0x68 0x67 0x66 0x65
. Wenn Sie diese Daten in Zeichenform betrachten würden, hätten Sie sie ursprünglichA B C D
, jetzt jedochD C B A
.Zurück zu einem Bytestrom - es ist nur eine Folge von Daten. Sie müssen wissen, was die Daten darstellen, um sie verwenden zu können. Wenn wir eine Textdatei lesen, handelt es sich bei dem Byte-Stream, den Sie beim Lesen der Datei erhalten, lediglich um Zeichen. Eine ausführbare Datei enthält eine Reihe nicht druckbarer Zeichen, weshalb sie als Binärdatei bezeichnet wird. Natürlich ist es möglich, eine ausführbare Datei in einem Texteditor zu öffnen, aber es macht nichts Sinn.
quelle
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Dies nimmt buchstäblich jedes Byte, verschiebt es in die richtige Position und kombiniert es mit den anderen.Ein Bytestrom ist eine geordnete Folge von Bytes. Es gibt ein erstes Byte, das keinen Vorgänger hat. Sein Nachfolger ist das zweite Byte und so weiter. Heutzutage besteht ein Byte weithin aus acht Bits. Um genauer zu sein, verwenden wir die Begriffe Oktett-Stream und Oktett . Es gibt immer noch Computer mit Bytes, die nicht acht Bits breit sind.
Hexadezimal ist eine Schreibweise für Zahlen und dient als gedruckte Darstellung für Binärdaten. Hexadezimal ist eigentlich Text. Beispielsweise
FE
könnte der Hexadezimalwert ein Byte darstellen: die Bits11111110
, die den Dezimalwert haben255
. TatsächlichFE
handelt es sich jedoch um eine Zeichenkette bestehend aus den ZeichenF
undE
, die zwei Bytes im US-ASCII- oder ISO-646-Zeichensatz benötigt! Diese zwei Bytes ist , wasFE
ist , und das einzelne Byte mit Wert 254 ist , was dieFE
darstellt , wie eine gedruckte Notation.Wenn ein Kommunikationskanal, ein Datei-Handle oder ein solches Gerät als Byte-Stream tragend beschrieben wird und keine anderen Informationen angegeben werden, bedeutet dies mit ziemlicher Sicherheit nicht , dass Bytes als hexadezimaler Text dargestellt werden, sodass jedes abstrakte Byte im Stream dies erfordert zwei physikalische Bytes.
Und Rohdaten bedeuten einfach Bits, die nicht dahingehend interpretiert werden, dass sie eine Struktur haben, die über das "Array von Bits" hinausgeht. Rohdaten haben normalerweise eine Struktur und stellen etwas dar. Wenn wir sie jedoch als Rohdaten betrachten, ignorieren wir entweder die Interpretation für den Moment (zum Beispiel betrachten wir die Rohdarstellung eines Datentyps, um ihre Richtigkeit zu überprüfen) auf Bitebene), oder die Interpretation ist nicht verfügbar (wir haben einige Daten, aber wir verstehen nicht die Struktur der Daten und was sie darstellen).
quelle
Ein Byte besteht aus 8 Bits. Ein Bit ist 0 oder 1. Die "Rohdaten" sind nur ein Fluss von einem Byte nach dem anderen. Ein Bytestream kann aus einer Datei, einer Netzwerkverbindung, einem serialisierten Objekt, einem Zufallszahlengenerator usw. stammen.
Es gibt verschiedene Möglichkeiten, ein Byte anzuzeigen: binär (01110110), hexadezimal = hexadezimal (7C), oktal (0271) oder dezimal (215). In allen Fällen beträgt der Maximalwert 255 (Basis 10).
Manchmal werden Zeichen wie ASCII Bytes zugewiesen. Geben Sie "ascii" in eine Unix-Befehlszeile ein, und Sie erhalten eine große Tabelle, die die Bytewerte 0-255 oder (0-FF hex) dem zugeordneten Zeichen zuordnet. Beispielsweise ist der Abstand x20 und "A" x40. Beachten Sie, dass einige Bytewerte Steuerzeichen zuordnen und nicht gedruckt werden können. Aber die Bytes selbst sind keine Zeichen - sie sind nur ein Bündel von Bits. Eine Zahl.
"4 Bytes umkehren" würde bedeuten, einige Bytes 123 42 231 0 zu nehmen und die Reihenfolge umzukehren - 0 231 42 123. Auf einen Bytedampf angewendet würde ich wahrscheinlich 4 Bytes lesen, sie umkehren, die nächsten 4 Bytes lesen usw .
(Übrigens ist dieses Problem relevant, denn wenn Sie eine Zahl größer als 255 als Bytes darstellen möchten, müssen Sie mehr als ein Byte verwenden. Aber dann lautet die Frage: Kommt das "größte" Byte zuerst oder zuletzt? Das heißt Big Endian oder Little Endian - suchen Sie nach Hintergrundinformationen, warum es nützlich ist, in einem Raw-Byte-Stream um die Bytes zu mischen.)
quelle