it-swarm.com.de

Wie kann ich den binären Inhalt einer Datei nativ in Windows 7 anzeigen? (Ist es möglich.)

Ich habe eine Datei, die etwas größer als 500 MB ist und einige Probleme verursacht.

Ich glaube, das Problem wird in der End-of-Line-Konvention (EOL) verwendet. Ich möchte die Datei in ihrer nicht interpretierten Rohform (1) betrachten, um die EOL-Konvention der Datei zu bestätigen.

Wie kann ich die "Binärdatei" einer Datei mit einer in Windows 7 integrierten Funktion anzeigen? Ich würde es vorziehen, keine zusätzlichen Dateien herunterladen zu müssen.

(1) Mein Kollege und ich haben die Datei in Texteditoren geöffnet und sie zeigen die Zeilen wie erwartet an. Beide Texteditoren öffnen jedoch Dateien mit unterschiedlichen EOL-Konventionen und interpretieren sie automatisch. (TextEdit und Emacs 24.2. Für Emacs hatte ich mit head -c4096 auf einer Linux-Box eine zweite Datei mit nur den ersten 4 KB erstellt und diese in meiner Windows-Box geöffnet.

Ich habe versucht, den Hexl-Modus in Emacs zu verwenden, aber als ich in den Hexl-Modus und zurück in den Text-Modus gewechselt bin, hat sich der Inhalt des Puffers geändert und am Ende jeder Zeile ein sichtbares ^ M hinzugefügt, was ich nicht bin im Moment darauf zu vertrauen.

Ich glaube, das Problem liegt möglicherweise am Ende der verwendeten Zeilenzeichen. Die Redakteure, mein Kollege und ich, haben versucht (1), die End-of-Line-Konvention automatisch zu erkennen und zeigten uns die Zeilen. Und basierend auf anderen Beweisen glaube ich, dass die EOL-Konvention nur die Rückgabe von Waren beinhaltet. (2) nur zurück.

Um zu wissen, was sich tatsächlich in der Datei befindet, möchte ich den binären Inhalt der Datei oder mindestens ein paar tausend Bytes der Datei betrachten, vorzugsweise in hexadezimaler Schreibweise, obwohl ich mit dezimaler oder oktaler Schreibweise arbeiten könnte. Nur Einsen und Nullen wären ziemlich grob anzusehen.

UPDATE

Mit Ausnahme derjenigen, die DEBUG vorschlägt, funktionieren alle unten aufgeführten Antworten in gewissem Maße. Ich habe jede davon als hilfreich eingestuft. Meine Frage war schlecht formuliert. Beim Testen der einzelnen Lösungsvorschläge stellte ich fest, dass ich wirklich wollte, dass Hexadezimal- und Textinhalte nebeneinander angezeigt werden und dass ich wollte, dass sich der Cursor über etwas befindet, entweder über einen Bytewert oder über das Textzeichen, das auf dem übereinstimmt Die andere Seite wird hervorgehoben.

Ich habe mein Problem tatsächlich gelöst, als der Emacs Hexl-Modus "richtig" lief. Also habe ich keine dieser Antworten benutzt, sondern sie nur getestet. (Sollte wirklich das seltsame Emacs-Verhalten untersuchen und einen Fehlerbericht einreichen.)

31

Sie benötigen einen "Hex-Editor". Ich benutze "Hex Editor Neo" seit Jahren und es ist sehr gut. Es ist verfügbar in kostenlosen und kostenpflichtigen Versionen . (Und ich bin mir sicher, dass es ähnliche Tools gibt.)

10
Daniel R Hicks

Wenn Sie über eine Powershell-Version 5.0 oder höher verfügen, können Sie die powershell integrierte Funktion Format-Hex verwenden.

PS:21 C:\Temp >Format-Hex application.exe

            0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

00000000   42 4D 5E 00 00 00 00 00 00 00 36 00 00 00 28 00  BM^.......6...(. 
00000010   00 00 0A 00 00 00 01 00 00 00 01 00 20 00 00 00  ............ ... 
00000020   00 00 00 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00  ......Ä...Ä..... 
00000030   00 00 00 00 00 00 B7 59 71 FF B7 59 71 FF B7 59  ......•Yq.•Yq.•Y 
00000040   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF B7 59  q.•Yq.•Yq.•Yq.•Y 
00000050   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF        q.•Yq.•Yq.•Yq.
25
AzizSM

Eingebaut, schnell und schmutzig: powershell starten, ausführen:

gc -encoding byte -TotalCount 100 "your_file_path" |% {write-Host ("{0:x}" -f $_) -noNewline " "}; write-Host   

TotalCount ist die Anzahl der Bytes, die Sie aus der Datei lesen möchten.

Google 'Powershell Hexdump', um besser funktionierende Versionen zu erhalten.

Wenn Sie über Windows Resource Kit-Tools verfügen (nicht genau integriert, aber geschlossen), können Sie auch ein cmd-Zeilendienstprogramm mit dem Namen list.exe verwenden. Es ist ein kleiner Editor mit Hex-Modus. Speziell für die Arbeit mit großen Dateien entwickelt:

List Text File Tool (List) ist ein Befehlszeilenprogramm, mit dem eine oder mehrere Textdateien angezeigt und durchsucht werden. Im Gegensatz zu anderen Textanzeigetools liest List beim Öffnen nicht die gesamte Datei in den Speicher. Es ermöglicht einem Benutzer, eine Textdatei in einem hexadezimalen Format zu bearbeiten.

List ist nützlich für die Remote-Anzeige von Text- oder Protokolldateien und für die Verwendung auf Servern, auf denen Administratoren eine Beeinträchtigung der Systemleistung befürchten.

25
wmz

HxD ist ein portabler Hex-Editor, für den keine Installation erforderlich ist. Es handelt sich lediglich um eine einzelne Exe-Datei.

http://mh-nexus.de/de/hxd/

Eine andere ähnlich tragbare Option ist Frhed:

http://frhed.sourceforge.net/en/screenshots/

6
Jay Sullivan

Dies funktioniert auch auf allen anderen Rechnern nach XP:

certutil -encodehex MyProgram.exe MyProgram.txt

XP benötigt das Windows Server 2003 Administration Tools Pack von hier:

https://www.Microsoft.com/en-us/download/details.aspx?id=16770

6
sparks

Kopieren Sie die Datei in einen Namen mit der Erweiterung .COM, wobei der Basisname nicht länger als acht Zeichen ist. Lauf

DEBUG ihr_Dateiname

Es wird ein 'geben-'Prompt. Art

DEnter

wiederholt zu display die Datei 128 Bytes auf einmal. Art

DAdresse Enter

um 128 Bytes anzuzeigen, die mit Adresse beginnen und hexadezimal eingegeben werden müssen, wobei der Dateianfang die Adresse 100 ist. Geben Sie ein

DAdresse1 Adresse2 Enter

zur Anzeige von Adresse1 bis Adresse2. Art

DAdresseLNummer Enter

anzeige von num Bytes (Länge) beginnend mit Adresse. num wird auch hexadezimal eingegeben. Verwenden Sie zum Beenden Q.

Zum Beispiel,

C:\Users\scott\Documents> debug thispost.com
-d
0BE4:0100  43 6F 70 79 20 74 68 65-20 66 69 6C 65 20 74 6F   Copy the file to
0BE4:0110  20 61 20 6E 61 6D 65 20-77 69 74 68 20 61 20 2E    a name with a .
0BE4:0120  43 4F 4D 20 65 78 74 65-6E 73 69 6F 6E 2C 20 77   COM extension, w
0BE4:0130  68 65 72 65 20 74 68 65-20 62 61 73 65 20 6E 61   here the base na
0BE4:0140  6D 65 20 69 73 20 6E 6F-20 6C 6F 6E 67 65 72 20   me is no longer
0BE4:0150  74 68 61 6E 20 65 69 67-68 74 20 63 68 61 72 61   than eight chara
0BE4:0160  63 74 65 72 73 2E 0D 0A-52 75 6E 20 44 45 42 55   cters...Run DEBU
0BE4:0170  47 20 2A 79 6F 75 72 5F-66 69 6C 65 6E 61 6D 65   G *your_filename
-d
0BE4:0180  2A 0D 0A 49 74 20 77 69-6C 6C 20 67 69 76 65 20   *..It will give
0BE4:0190  61 20 27 2D 27 20 70 72-6F 6D 70 74 2E 0D 0A 54   a '-' Prompt...T
0BE4:01A0  79 70 65 20 44 20 45 6E-74 65 72 20 72 65 70 65   ype D Enter repe
0BE4:01B0  61 74 65 64 6C 79 20 74-6F 20 2A 2A 64 2A 2A 69   atedly to **d**i
0BE4:01C0  73 70 6C 61 79 20 74 68-65 20 66 69 6C 65 20 31   splay the file 1
0BE4:01D0  32 38 20 62 79 74 65 73-20 61 74 20 61 20 74 69   28 bytes at a ti
0BE4:01E0  6D 65 2E 0D 0A 54 79 70-65 20 44 20 5F 61 64 64   me...Type D _add
0BE4:01F0  72 65 73 73 5F 20 74 6F-20 64 69 73 70 6C 61 79   ress_ to display
-d 200 L16
0BE4:0200  20 31 32 38 20 62 79 74-65 73 20 73 74 61 72 74    128 bytes start
0BE4:0210  69 6E 67 20 61 74                                 ing at
-
6
Scott

Da Windows 7 mit dem integrierten Dotnet Framework 3.5 geliefert wird, ist der C # -Compiler bereits integriert, sodass Sie beispielsweise die Auflistung von http://illegalargumentexception.blogspot.co abrufen können .de/2008/04/c-datei-hex-dump-anwendung.html und kompilieren Sie dann mit

  \windows\Microsoft.NET\Framework\v3.5\csc printhex.cs 

und Sie sollten mit einer printhex.exe enden, die sowohl Hex- als auch ASCII-Zeichen anzeigen sollte.

5
sgmoore

Es ist nicht ideal, aber wenn Sie wirklich nichts herunterladen möchten, können Sie versuchen, fc/b zu verwenden (dh Datei im Binärmodus zu vergleichen ), um diese Datei mit einer anderen, völlig anderen Datei zu vergleichen, und zeigt Ihnen die Hex-Werte jedes Bytes an, das anders ist. Möglicherweise erhalten Sie Werte, die in beiden Dateien identisch sind, und werden daher möglicherweise von der Ausgabe übersprungen. Sie können jedoch feststellen, ob dies der Fall ist, indem Sie in der Offset-Spalte nach fehlenden Werten suchen.

2
sgmoore

Sie können die PowerShell-Funktion unten zusammen mit Get-Content verwenden, um einen Hexdump des Dateiinhalts anzuzeigen, d. H. Get-Content -Encoding Byte 'MyFile.bin' | Get-HexDump. Es dauert ungefähr 23 Sekunden, um eine 222-KB-Datei zu sichern. Falls gewünscht, kann die Ausgabe in eine Textdatei umgeleitet werden, um die Überprüfung der Sicherung zu vereinfachen.

function Get-HexDump
{
    [CmdletBinding()]
    param
    (
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [byte[]] $Bytes,
        [Parameter(ValueFromPipeline = $false)]
        [string] $Encoding
    )

    BEGIN
    {
        if ([string]::IsNullOrEmpty($Encoding) -eq $true)
        {
            $Encoding = "ascii"
        }

        if ($Encoding -inotin [System.Text.Encoding]::GetEncodings().Name + "ascii" + "unicode")
        {
            Throw New-Object ArgumentException("Encoding must be $([System.Text.Encoding]::GetEncodings().Name -join ", "), unicode, or ascii.", '$Encoding')
        }

        $displayEncoding = [System.Text.Encoding]::GetEncoding($Encoding)

        $counter = 0
        $hexRow = ""
        [byte[]] $buffer = @()
    }

    PROCESS
    {
        foreach ($byte in $Bytes)
        {
            $buffer += $byte
            $hexValue = $byte.ToString("X2")

            if ($counter % 16 -eq 0)
            {
                $buffer = @($byte)
                $hexRow = "$($counter.ToString("X8")): $($hexValue) "
            }
            elseif ($counter % 16 -eq 15)
            {
                $bufferChars = $displayEncoding.GetChars($buffer);
                $bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { "." } else { "$_" } }) -join "")
                $hexRow += "$($hexValue)   $($bufferText)"
                $hexRow
            }
            else
            {
                $hexRow += "$($hexValue) "
            }

            $counter++
        }
    }

    END
    {
        $counter--

        if ($counter % 16 -ne 15)
        {
            $hexRow += " " * (((16 - $counter % 16) * 3) - 1)
            $bufferChars = $displayEncoding.GetChars($buffer);
            $bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { "." } else { "$_" } }) -join "")
            $hexRow += "$($bufferText)"
            $hexRow
        }
    }
}

Die Ausgabe sieht folgendermaßen aus:

00000000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   ................
00000010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F   ................
00000020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
00000030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
00000040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F   @ABCDEFGHIJKLMNO
00000050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F   PQRSTUVWXYZ[\]^_
00000060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F   `abcdefghijklmno
00000070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F   pqrstuvwxyz{|}~.
00000080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F   ????????????????
00000090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F   ????????????????
000000A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF   ????????????????
000000B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF   ????????????????
000000C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF   ????????????????
000000D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF   ????????????????
000000E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF   ????????????????
000000F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF   ????????????????
1
JamieSee

Da Sublime-Text mein Lieblingseditor ist, verwende ich sein Plugin zum Anzeigen von Hex-Dateien. http://facelessuser.github.io/HexViewer/

HexViewer

1
Zuhayer

Ich weiß, dass Sie Emacs verwenden, aber Vim Benutzer können das Dienstprogramm xxd verwenden:

xxd -s <start_offset> -l <length_offest> <file>

d.h.

Usage:
       xxd.exe [options] [infile [outfile]]
    or
       xxd.exe -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
    -a          toggle autoskip: A single '*' replaces nul-lines. Default off.
    -b          binary digit dump (incompatible with -ps,-i,-r). Default hex.
    -c cols     format <cols> octets per line. Default 16 (-i: 12, -ps: 30).
    -E          show characters in EBCDIC. Default ASCII.
    -g          number of octets per group in normal output. Default 2.
    -h          print this summary.
    -i          output in C include file style.
    -l len      stop after <len> octets.
    -ps         output in postscript plain hexdump style.
    -r          reverse operation: convert (or patch) hexdump into binary.
    -r -s off   revert with <off> added to file positions found in hexdump.
    -s [+][-]seek  start at <seek> bytes abs. (or +: rel.) infile offset.
    -u          use upper case hex letters.
    -v          show version: "xxd V1.10 27oct98 by Juergen Weigert (Win32)".
0
Michaelangel007