Kann mir jemand erklären, was der 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 mich jemand gebeten hat, „die 4-Byte-Daten umzukehren“, was soll ich dann annehmen, dass die Daten Hex-Code oder Binärcode sind?
Kommentare
- Meine zwei Cent sind keine Antwort wert (und es gibt bereits gute unten), aber ich möchte nur Links zu diesen beiden Artikeln bereitstellen, die wahrscheinlich einen guten Einblick darüber geben, wie “ Rohdaten “ wird so interpretiert, dass es tatsächlich etwas bedeutet (‚ bedeutet nichts, es sei denn, Sie wissen, was es darstellen soll und wie es codiert ist / gespeichert) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
- Ich denke, Java hat ein Byte erstellt, um die Verwendung von c / c ++ ‚ s Zeichen für Dinge zu vermeiden, die ‚ nicht als Zeichen verstanden werden. char wurde in c / c ++ häufig verwendet, da die Größe von char 1 Byte beträgt. Auch Geräte unter Unix sind Block- und Zeichengeräte. Wenn Sie von char-Geräten lesen, erhalten Sie einen Stream mit vorzeichenlosen Zeichen / Bytes.
- Der Byte-Stream ist nicht eindeutig. Octet-Stream ist nicht.
- Daten können auf vielen Ebenen interpretiert werden. Unten ist ‚ nur eine Reihe von elektrischen Ein- und Ausschaltpegeln. Etwas höher ist ‚ ein Teil der Bytes oder, wie Sie sagen, ein Bytestream . Noch weiter oben beginnen Sie, die Rohdaten zu interpretieren. Bytes können auf viele Arten als Text interpretiert werden (Codierungen). Auch ganzzahlige Zahlen (Big oder Little Endian). Sie können sogar höher gehen. Sie haben eine Zip-Datei. Diese Zip-Datei ist Ihr Backup von gestern. Und so weiter. Das Problem ist, dass die genaue Ebene oft implizit ist und nicht klargestellt wird. Dies kann verwirrend sein.
Antwort
Byte-Streams enthalten Bytes. Aufgeschlüsselt in das, was es tatsächlich 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 zwischen 0 und 255 liegen). Byte Streams sind normalerweise ausgefeilte Schnittstellen, die das zugrunde liegende Basis-Byte-Array verbergen sollen, das zum Speichern eines Ringpuffers verwendet wird (Sie füllen den Puffer auf und warten, bis jemand ihn leert. Zu diesem Zeitpunkt füllt er einfach den Puffer nochmal).
Was zum Teufel bedeutet das? Nun, es könnte eine Textdatei, ein Bild oder einen Live-Videostream darstellen. Was es ist , hängt ganz vom Kontext ab, wer es liest. Hex-Darstellung ist eine andere Art, dasselbe zu sagen, obwohl es manchmal bequemer ist, Bytes in Bezug auf ihre Hex-Darstellung zu verwalten, als Zahlen, aber es ist dasselbe.
Wenn Sie sich auf Rohdaten beziehen, beziehen Sie sich normalerweise auf Byte-Daten. Die Daten werden ohne Tag mit der Aufschrift „Ich bin eine Bilddatei!“ geliefert. Normalerweise beschäftigen Sie sich nur mit Rohdaten, wenn Sie dies nicht tun. Es ist mir egal, was die Daten insgesamt darstellen. Wenn ich zum Beispiel ein Bild in seine Schwarzweißversion konvertieren möchte, könnte ich sagen, dass ich die Rohdaten eines Bildes lesen und für jeweils 3 gelesene Bytes (was tatsächlich eine Darstellung der roten Farbe, eine Darstellung der grünen Farbe und wäre) Darstellung der blauen Farbe), addiere ihren Zahlenwert und dividiere durch 3, schreibe dann diesen Wert dreimal. Im Wesentlichen würde ich die roten, grünen und blauen Werte eines Pixels mitteln und daraus sein graues äquivalentes Pixel machen Wenn Sie jedoch über das Ausführen von Operationen mit Daten auf der Ebene „Byte für Byte“ sprechen, ist Ihnen das Gesamtbild sozusagen nicht wirklich wichtig.
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 lediglich um ein großes Byte-Array handelt, wie Sie es ursprünglich für die Datenbank bereitgestellt haben. Wenn diese Daten eine Datei waren, müssen Sie als Programmierer dieses Byte neu interpretieren Daten, als würden Sie eine Datei byteweise lesen.
Wenn Sie jemand auffordert, „die 4-Byte-Daten umzukehren“, würde ich davon ausgehen, dass es sich um eine Big-Endian- oder eine Little-Endian-Interpretation von Zahlen handelt 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 Das heißt nicht, dass die tatsächliche Zahlendarstellung (oder Hex-Darstellung) geändert wird, sondern 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, hätten 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, wie er war beabsichtigt in den Rohdaten.
Ich hoffe, das erklärt es!
Kommentare
- Alles ist in Ordnung ..! Können Sie bitte die Antwort bezüglich “ Rohdaten “ näher erläutern?
- @ user2720323 Okay, geändert, um dies besser zu erklären “ Rohdaten. “ 🙂
- Eine Sache, die Sie beachten sollten … alle Daten sind einfach eine Sammlung von Bytes. Die Bedeutung dieser Bytes wird durch eine Art von Metadaten (Dateierweiterung, Datenbankfeld usw.) definiert. Eine Bilddatei kann als ASCII-Datei interpretiert werden und umgekehrt. Der Text oder das Bild ist möglicherweise bedeutungslos, aber es ist immer noch möglich. (Derp … ich hätte die nächsten Antworten lesen sollen)
- @kevincline Bitte versuchen Sie zu verstehen, dass ich ‚ versuche, eine Idee zu vermitteln. Meine Priorität ist nicht ‚ t, um einen genauen Algorithmus zu schreiben. Wenn Sie genauer sein möchten, müssen Sie ‚ die Werte für Rot, Grün und Blau entsprechend der Wahrnehmung des menschlichen Auges abwägen.
Antwort
Ein Byte ist einfach eine Informationseinheit – es kann alles sein. Ein Byte an sich bedeutet nichts, Sie müssen ihm eine Bedeutung hinzufügen.
Um das zu erweitern –
Enthält es nur Bytes (Hex-Daten) oder Binärdaten oder englische Buchstaben?
Hex-Daten sind dieselben 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.
Wenn mich jemand gebeten hätte, „die 4-Byte-Daten umzukehren“, was sollte ich dann annehmen? Hex-Code oder Binärcode?
Da Hex nur eine Darstellung der Daten ist, spielt es keine Rolle, wie Sie denken Wenn Sie Daten von 0x65 0x66 0x67 0x68
haben, erhalten Sie zum Umkehren 0x68 0x67 0x66 0x65
. Wenn Sie diese Daten in Bezug auf betrachten Zeichen, Sie hätten ursprünglich A B C D
, aber jetzt haben Sie D C B A
.
Zurück zu einem Byte-Stream – es „s nur eine Folge von Daten. Sie müssen wissen, was die Daten darstellen, um sie verwenden zu können. Wenn wir eine Textdatei lesen, besteht der Bytestream, den Sie beim Lesen der Datei erhalten, nur aus 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 Nützliches.
Kommentare
- +1 Die Betonung von binär im Lat-Bit scheint jedoch fehl am Platz zu sein. “ Binärdaten “ enthalten häufig nicht druckbare Zeichen, aber ‚ heißt “ binär „, weil es ‚ aus Binärziffern besteht, nicht weil es nicht druckbare Zeichen enthält . Ich verstehe, dass Sie ‚ “ binär “ im Gegensatz zu druckbarer “ Text “ Daten, aber ich denke, dies kann das OP noch weiter verwirren.
- Ich habe eine Frage zur Umkehrung. Wenn ich eine Ganzzahl (32 Bit) 325487 in einer Datei habe, wie kann ich diese 4-Byte-Ganzzahl umkehren? Ebenso habe ich ein Wort (“ hai, wie geht es dir „), wie man diese Zeichenfolge umkehrt, indem man jedes Zeichen als Byte annimmt.
- @ user2720323
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.
Antwort
Ein Bytestream 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 wird allgemein verstanden, dass ein Byte aus acht Bits besteht. Wenn wir genauer sein wollen, verwenden wir die Begriffe Oktettstrom und Oktett . Es gibt immer noch Computer mit Bytes, die nicht acht Bit breit sind.
Hexadezimal ist eine Methode zum Schreiben von Zahlen und dient als gedruckte Darstellung für Binärdaten. Hexadezimal ist eigentlich Text Beispielsweise könnte der Hexadezimalwert FE
ein Byte darstellen: die Bits 11111110
mit dem Dezimalwert 255
.FE
ist jedoch eine Zeichenfolge, die aus den Zeichen F
und E
besteht zwei Bytes im US-ASCII- oder ISO-646-Zeichensatz! Diese beiden Bytes sind FE
und das einzelne Byte mit dem Wert 254 ist das, was die FE
als gedruckte Notation darstellt.
Wenn ein Kommunikationskanal, ein Dateihandle oder ein solches Gerät beschrieben wird Da ein Bytestream übertragen wird und keine anderen Informationen angegeben werden, bedeutet dies mit ziemlicher Sicherheit, dass nicht bedeutet, dass Bytes als hexadezimaler Text dargestellt werden , so dass jedes abstrakte Byte im Stream zwei physikalische Bytes benötigt.
Und Rohdaten bedeuten einfach Bits, die nicht so interpretiert werden, dass sie eine Struktur haben, die über nur „Array von Bits“ hinausgeht. Rohdaten haben normalerweise eine Struktur und repräsentieren etwas, aber wenn wir sie als Rohdaten betrachten, ignorieren wir entweder die Interpretation für den Moment (zum Beispiel betrachten wir die Rohdarstellung eines Datentyps, um seine Richtigkeit zu überprüfen bis zum Detail auf Bitebene), oder die Interpretation ist nicht verfügbar (wir haben einige Daten, aber wir verstehen die Struktur der Daten und deren Darstellung nicht).
Kommentare
- Der PDP-10 hatte Anweisungen zum Umgang mit Bytes variabler Größe. Am häufigsten war 7-Bit-ASCII, gefolgt von 6-Bit-Zeichen.
Antwort
Ein Byte ist 8 Bits. Ein Bit ist 0 oder 1. Die „Rohdaten“ sind nur ein Fluss von einem Byte nach dem anderen. Ein Byte-Stream kann aus einer Datei, einer Netzwerkverbindung, einem serialisierten Objekt, einem Zufallszahlengenerator usw. stammen.
-
Es gibt verschiedene Möglichkeiten, ein Byte anzuzeigen: binär (01110110) , hex = hexidezimal (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, in der die Bytewerte 0-255 oder (0-FF hex) dem zugeordneten Zeichen zugeordnet sind. Beispielsweise ist Leerzeichen x20 und „A“ x40 Beachten Sie, dass einige Bytewerte Steuerzeichen zugeordnet und nicht druckbar sind. 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 umzudrehen – 0 231 42 123. Auf einen Byte-Dampf angewendet, I. „Ich würde wahrscheinlich 4 Bytes lesen, sie umkehren, die nächsten 4 Bytes lesen usw.
(Übrigens ist dieses Problem relevant, denn wenn Sie eine Zahl darstellen möchten, die größer als ist 255 Als Byes müssen Sie mehr als ein Byte verwenden. Aber dann ist die Frage, ob das „größte“ Byte zuerst oder zuletzt kommt. Das nennt man Big Endian oder Little Endian – schauen Sie nach, um mehr Hintergrundinformationen darüber zu erhalten, warum Es ist nützlich, die Bytes in einem Rohbyte-Stream zu mischen.)