Warum sehen Sie keinen Binärcode, wenn Sie eine Binärdatei mit einem Texteditor öffnen?

12687
Templar

Warum sehen Sie keinen Binärcode, wenn Sie eine Binärdatei mit einem Texteditor öffnen? Wenn ich beispielsweise ein Bild mit einem Texteditor öffne, sehe ich einige merkwürdige Zeichen und auch einige vom Menschen lesbare Zeichen. Das Bild sollte jedoch binär codiert sein.

50
Hexdump nachschlagen. Sie sehen nicht binär, Sie sehen hexadezimal. Es ist das für Menschen am besten lesbare, das Sie bekommen werden. Der Texteditor versucht, ihn in der Nähe von lesbarem Text anzuzeigen. Es wird vermutet, dass Sie Müll sehen können. Verwenden Sie zum Anzeigen des Inhalts einen Hex-Editor, der die Datei in hexadezimalen Paaren (Byte) anzeigt und die Bearbeitung der Datei ermöglicht. Fiasco Labs vor 12 Jahren 0
Was hast du erwartet? Wie sollte das archiviert werden? Nikodemus RIP vor 12 Jahren 8
Ich frage mich, warum nicht mehr Editoren die Binärdatei als unformatierte ASCII-1/0-Sequenzen anbieten. Xeoncross vor 12 Jahren 2
@ Xenocross: Da die rohe 0/1-Sequenz unbrauchbar ist, ist sie für die manuelle Dekodierung zu unhandlich, da sie sehr viel Platz auf dem Bildschirm benötigt. Hex-Anzeige ist im Allgemeinen für manuelle Dekodierung überlegen. Und mit etwas Übung können Sie Hex in Binär und umgekehrt schnell und einfach übersetzen. Lie Ryan vor 12 Jahren 7
Wie Lie Ryan sagte. Jeder, der am Programmieren von Maschinensprachen beteiligt war, weiß, dass die Basiseinheit das 8-Bit-Byte ist, das leicht als zwei Hex-Zahlen dargestellt werden kann. Die einzige Zeit, in der die Binärdatei nützlich ist, ist die Verwendung von Flag-Bits. In der restlichen Zeit übertragen Register Daten in mindestens 8-Bit-Blöcken, selbst wenn es sich um 64 Bit handelt. Binär wird an dieser Stelle doof und unhandlich. Fiasco Labs vor 12 Jahren 0
@Fiasco Labs: Pedantry: Eine Hexadezimalzahl * mit zwei * Ziffern * - 00 bis FF, die in dezimale 0 - 255 übersetzt werden (8 Bits stehen für 2 ^ 8 = 256 mögliche Zustände). Piskvor vor 12 Jahren 3
@Piskvor - Danke, dass du es besser als ich gesagt hast. Deadbeef ist eine hexadezimale Zahl mit 8 Ziffern für die Aufzeichnung. ; ^) Fiasco Labs vor 12 Jahren 1

5 Antworten auf die Frage

83
Daniel Beck

Binär- und Textdaten werden nicht getrennt: Es handelt sich lediglich um Daten . Es hängt von der Interpretation ab, die sie zum einen oder anderen macht. Wenn Sie binäre Daten (z. B. eine Bilddatei) in einem Texteditor öffnen, ist ein Großteil davon nicht sinnvoll, da sie nicht Ihrer gewählten Interpretation (als Text) entsprechen.

Was Sie Text nennen, ist eine Teilmenge des möglichen Dateiinhalts: Daten, die in einem bestimmten Zeichensatz in lesbare Zeichen übersetzt werden.

In ASCII können Sie beispielsweise sehen, dass von 128 "zulässigen" Werten nur etwa die Hälfte Buchstaben und Zahlen sind, 30 Interpunktionszeichen und der Rest Steuerzeichen . Die letztere Gruppe wird in Textdateien nicht viel verwendet und sie haben keine wirklich gute Textdarstellung. Einige davon sind Tabulator- und Zeilenumbruch- Zeichen, bei denen Texteditoren bereits kreativ sein müssen, um sie anzuzeigen.

Einige Texteditoren haben Optionen, um Leerzeichen explizit anzuzeigen. Sie werden dann zusätzlich zu ihrem regulären Formatierungsverhalten (was auch nur die Interpretation dieser Zeichen ist) als Zeichen gezeichnet .

Reines ASCII interpretiert nur 128 Werte. Die zum Speichern dieser Informationen verwendeten Bytes haben jeweils 256 mögliche Werte, daher ist die Hälfte der möglichen Werte in ASCII nicht zulässig. Diese werden z. B. in regionenspezifischen Zeichensätzen wie Latin 1 verwendet, in ASCII jedoch nicht definiert. Sie haben keine nützliche Darstellung in einem Text-Viewer, der nur mit ASCII umgehen kann.


Binärdaten werden normalerweise nicht als Text interpretiert. In diesen Dateien werden also häufig alle möglichen Byte-Werte gefunden. Alles andere wäre verschwenderisch (und deshalb können Sie Text sehr gut komprimieren). Bilddateiformate sind kompliziert und werden normalerweise nicht als Text angezeigt, sodass sie nicht lesbar sein müssen.

Da es keine allgemeine Dateninterpretation (Zeichensatz) gibt, die alle möglichen Werte lesbaren Zeichen zuordnet, und da dies ohnehin keinen Sinn ergibt (da es sich nicht um lesbaren Text handelt), werden wichtige Teile als Kauderwelsch dargestellt.


Ein Hex-Editor wählt eine andere Darstellung für die Daten: Er zeigt jedes Byte als zwei Hexadezimalziffern an . Es ist nur eine andere Darstellung und eine mit einem leicht lesbaren Zeichensatz: Alle 256 möglichen Byte-Werte können als zwei Hex-Ziffern dargestellt werden.

Da es eine einfache Zuordnung von Binärdaten zu Hexadezimalzahlen und umgekehrt gibt (4 Binärziffern zu / von einer Hexadezimalziffer) und Binärdaten sehr wenige Informationen pro Ziffer enthalten, ist Hexadezimalzeichen in der Regel die bevorzugte Methode für Menschen, Binärdaten zu lesen, es sei denn, es gibt bestimmte Gründe, eine andere Darstellung zu bevorzugen.


Einige Texteditoren verfügen möglicherweise über einen Hex-Editor-Modus und eine Heuristik, bei der versucht wurde, festzustellen, ob eine Datei Text oder Binärdatei ist, und wählt automatisch den einen oder den anderen Modus aus. Dies kann jedoch schwierig sein, um richtig zu sein, und es ist keine spezifische Eigenschaft der Datei, die besagt, ob es sich um die eine oder andere Art handelt.


Bei einigen FTP-Clients müssen Sie angeben, welche Dateiendungen für Textdaten verwendet werden . Diese Programme ändern dann den Dateiinhalt an das Betriebssystem des Computers, mit dem Sie verbunden sind, da Windows eine andere Zeilenende-Zeichenfolge ( CR/LF) als Linux und Unix (einschließlich Mac OS X; LF) verwendet.

Uhhh, der LF hat mich öfter gebissen als ich mich erinnern möchte. surfasb vor 12 Jahren 4
33
Ignacio Vazquez-Abrams

Weil Sie es in einem Texteditor geöffnet haben, nicht in einem binären Editor .

Wie Sie gesehen haben, Text. Ignacio Vazquez-Abrams vor 12 Jahren 22
Text als Darstellung von paarweise (Bytes) angeordneten Hexadezimalzahlen (0-f). Wenn Sie eine Binärdatei wünschen, konvertieren Sie das Hex in eine sinnlose Zeichenfolge aus Nullen und Einsen. Hex ist für Menschen lesbarer und einfacher zu verstehen. Fiasco Labs vor 12 Jahren 1
Ich muss sagen: Jemand sollte den mutigen Schritt machen, um einen echt-binären Editor herauszugeben, mit ** Ones and Zeros ** (und dann möglicherweise separaten Fenstern mit verwandten Hex / Char / Dec-Umsetzern), um dies nur zu lehren Art von Sachen. Ich weiß, dass sie das nicht sollten, aber populäre Medien und Mathematiklehrer, die vorgeben, Computer zu kennen, setzen alle Erwartungen für eifrige Kinder, die bereit sind zu lernen, falsch. ZJR vor 12 Jahren 2
@ZJR: Kein Grund, warum sie nicht sollten. In vielen Hex-Editoren können Sie den Dateiinhalt binär anzeigen. Programmierer finden es im Allgemeinen einfach nicht so nützlich wie die hexadezimale Ansicht, so dass Sie nicht so viel davon hören. David Z vor 12 Jahren 0
17
Andrew Turner

Es hat alles mit Kontext und Interpretation zu tun. In Ihrem Computer befinden sich Muster mit hoher und niedriger Spannung oder magnetisierte Bereiche einer Platte, die nur dann an Bedeutung gewinnen, wenn wir entscheiden, wie wir sie interpretieren wollen.

Unter verschiedenen Umständen könnte das Muster niedrig-hoch-niedrig-niedrig-niedrig-niedrig-niedrig-niedrig-hoch-hoch die Zahl 65 bedeuten, einen Großbuchstaben 'A', eine himmelblaue Farbe, den ein Kunde Kaffee bestellt hat, das Datum 'März' 6. 'oder irgendetwas wirklich.

Wenn Sie Ihre Bilddatei in einem Grafikprogramm öffnen, kann sie diese als ein Bild interpretieren. Sie weiß, welche Muster das Bildformat angeben, welche Muster die Bildgröße usw.

Wenn Sie Ihre Bilddatei in einem Texteditor öffnen, wird sie als Text behandelt. Dies ist ein sehr einfaches Format, viel näher an dem, was wirklich im Computer abläuft, aber es gibt noch einige Interpretationen. Insbesondere wird fast jedes Muster als ein bestimmtes Zeichen interpretiert, einige normal wie AZ, aber auch einige seltsame Zeichen. Einige Muster werden nicht als Zeichen angezeigt, sondern als grundlegende Formatierung behandelt: Zeilenumbruch, Tabulator.

(Die Situation ist durch Dinge wie Unicode und Textkodierungen wie UTF-8 etwas kompliziert, aber ich werde der Einfachheit halber hier nicht darauf eingehen.)

Wenn Sie eine Binärdatei in einem Texteditor geöffnet haben, achten Sie darauf, keine Änderungen vorzunehmen, da fast jede Änderung die normale Interpretation des Inhalts der Datei vollständig unterbricht, dh die Datei ruiniert und unbrauchbar wird.

3
medivh

Ein vereinfachtes Beispiel ist eine mit einem Texteditor geöffnete Bilddatei.

Das Bild ist ein einfaches Schachmuster, wobei die Quadrate 3 Pixel breit sind und zwischen jedem Quadrat ein grauer 1-Pixel-Rand vorhanden ist. - drei schwarze Pixel, ein grauer Randpixel, drei weiße Pixel, ein grauer Randpixel, Wiederholung.

Die erste Zeile in diesem Bild hätte viermal folgenden Wert:

Black Black Black Gray White White White Gray 0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F 

(In Hex und nicht in Binary - der String in Binary wäre viermal so lang - 0x7F wird durch 0b01111111 ersetzt.)

Wenn Sie diese Datenfolge in einen Texteditor laden, erhalten Sie folgenden Text:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Blank] [Blank] [Blank] [Blank] [Blank] [Blank] ] [Blank] [Blank] [Blank] [Blank] [Del] [Del] [Del]

Dies liegt daran, dass 0x00 der ASCII-Code für den Nullwert ist und Sie dies dreimal schreiben müssen, um den Wert für ein schwarzes Pixel (sowieso In 24bit BMP) zu erhalten, und Sie haben 3 schwarze Pixel. Dann ist 0x7F der ASCII-Code für Delete, und Sie benötigen das dreimal, um ein graues Pixel zu erhalten. 0xFF ist kein valud-ASCII-Code für bestimmte Dinge - selbst im erweiterten ASCII-Satz - und Sie müssen ihn 9-mal schreiben, um 3 weiße Pixel zu erhalten. Wenn Sie den Vorgang beendet haben, erhalten Sie drei weitere Löschvorgänge, um ein graues Pixel zu schreiben.

Eine andere Art, dies zu zeigen, was sinnvoller sein könnte, ist das umgekehrte Beispiel: Was müssen Sie in eine Datei schreiben, um Nullen und Einsen zu erhalten, wenn Sie sie in einem Texteditor öffnen?

Die ASCII-Codes für Null und Eins natürlich! Eine Null in einem Texteditor wird nicht als einzelnes Bit mit dem Wert 0 gespeichert, sondern als 8 Bit mit dem Wert 0b00110000 oder in Hex 0x30

Der ASCII-Code für '0' ist 0x30 und der ASCII-Code für '1' ist 0x31. Wenn Sie ein Schachmuster als Nullen und Einsen speichern möchten, sieht Ihre Datei folgendermaßen aus:

text editor: 10101010 01010101 10101010 01010101  Stored data (ASCII values for '1', '0' and 'new line'): 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 

Es gibt noch viel mehr als das - Dateien haben Starts, Stopps und Metadaten und alle anderen Arten von Dingen, aber die häufigste Lektion und Antwort auf Ihre Frage lautet:

Wenn die ersten 8 Bits Ihrer Datei nicht 0b00110000 sind, schreibt Ihr Texteditor keine '0', da dies der ASCII-Code für das Zeichen '0' ist. Wenn die ersten 8 Bits Ihrer Datei nicht 0b00110001 sind, schreibt Ihr Texteditor keine '1', da dies der ASCII-Code für das Zeichen '1' ist.

0
Emilio M Bumachar

Der Editor ist nicht intelligent genug, um herauszufinden, ob ein Text sinnvoll ist oder nicht. Er zeigt also jede Datei als Text an, sofern nicht ausdrücklich etwas anderes gesagt wird, sofern diese Funktion vorhanden ist. Wie andere darauf hingewiesen haben, haben einige Editoren die Möglichkeit, Hex anzuzeigen.

UltraEdit ist intelligent genug - es wechselt für solche Dateien in den Hex-Bearbeitungsmodus. Peter Mortensen vor 6 Jahren 0