2016-09-21 4 views
-2

Ich bin ein Anfänger, der versucht, ein Programm zu schreiben, das in .exe-Dateien, .class-Dateien oder .pyc-Dateien liest und den prozentualen Anteil an alphanumerischen Zeichen (az, AZ , 0-9). Hier ist, was ich habe jetzt (ich versuche nur zu sehen, ob ich etwas im Moment identifizieren kann, nicht Sachen suchen noch zu zählen):So überprüfen Sie alphanumerische Zeichen in einer Binärdatei

chars_total = 0 
chars_alphnum = 0 
iterate = 1 

with open("pythonfile.pyc", "rb") as f: 
    byte = f.read(iterate) 
    while byte != b"": 

     chars_total += 1 
     print (byte) 

     iterate +=1 
     byte = f.read(iterate) 

Dieser Code druckt verschiedene Bytes wie

b'\xe1WQ\x00' 
b'\x00\x00c\x00\x00' 

aber ich habe Probleme mit der Übersetzung der Bytes selbst.

Ich habe auch versucht print (binascii.hexlify(byte)) nach dem Importieren binascii, die alles in alphanumerische Zeichen konvertiert, die nicht ganz das zu sein, was ich suche. Bekomme ich gerade etwas schwer falsch oder bin ich zumindest auf dem richtigen Weg?

Vollständiger Disclaimer, dies bezieht sich zu einem kleinen Teil auf eine Hausaufgabe, aber wir haben die Erlaubnis, diese Seite zu benutzen, da weder das In-Class-Material noch die Lektüre irgendeine Kodierung umfasst. Und ja, ich habe versucht, das herauszufinden, bevor ich hierher kam.

+4

müssen Sie wirklich Ihre Hausaufgaben machen. –

+2

1) Öffnen Sie die Datei. 2) Lesen Sie den Inhalt. 3) Iteriere über die Bytes. 4) Bestimmen Sie, ob ein Byte alphanumerisch ist oder nicht. 5) Zähle weiter. 6) Ergebnis anzeigen. Bisher haben Sie gezeigt, dass Sie keinen dieser Schritte durchgeführt haben. Bitte geben Sie an, mit welchem ​​Problem Sie gerade Probleme haben, und zeigen Sie den Code an, den Sie zumindest versucht haben. –

+0

Ja, das ist Teil einer Hausaufgabe. Siehe die obigen Änderungen. –

Antwort

0

Angenommen, Sie von einem beliebigen binären lesen, für die es vielleicht nicht möglich sein, sie zu entschlüsseln, um ASCII/UTF-8, können Sie so etwas wie die folgenden

import string 
# create a set of the ascii code points for alphanumerics 
alphanumeric_codes = {ord(c) for c in string.ascii_letters + string.digits} 
file_bytes = b'...' 
alphanumerics = (b for b in file_bytes if b in alphanumeric_codes) 
percent_alphanumerics = 100.0 * len(alphanumerics)/len(filebytes) 
0

Auf Windows versuchen könnten, könnten Sie eine verwenden Einfaches PowerShell-Skript, um den hexdump zu erhalten (schauen Sie hier) und dann dekodieren Sie es mit Python zu dem von Ihnen gewünschten Standard (ascii, unicode) (schauen Sie hier https://docs.python.org/2/library/functions.html#chr), nur die alphanumerischen Zeichen beibehalten.

Unter Linux, $ man hexdump auf einem Terminal.

Verwandte Themen