2017-01-04 2 views
0

Ich möchte jedes Zeichen in seine binäre Darstellung konvertieren (nicht eine Zeichenfolge wie meine cuurent Code jetzt) ​​es muss eine Folge von Binärzahlen sein danach werde ich alle 16 Bits nehmen von dem, was ich ihre Summe und berechnen gemacht habe ich numpy oder anderes Paket verwenden kann nicht das ist, was ich jetzt habe und eskonvertieren Sie eine Zeichenfolge in eine Sequenz von Binär

def checksum(st): 
    data = ' '.join(map(bin,bytearray(st))) 
    binar = [data[i:i+16] for i in range(0, len(data), 16)] 
    check = 0xffff 
    for hex in binar: 
     check += int(hex,2) 
    return check 

mein aktueller Code erhält einen String (zum Beispiel: '10100/01 ') und ich möchte alle 16 Bits des Strings dafür summieren, ich muss den String in Binärzahlen umwandeln und dann summiere alle 16 Bits zusammen

+0

Ich habe Ihrem Code Leerzeichen hinzugefügt, um die Lesbarkeit zu verbessern. Meine erste Bearbeitung, bitte iss mich nicht. Wie auch immer, warum "int" statt "ord"? Fehle ich etwas? –

+0

ord bekommt ein einzelnes Zeichen Ich möchte eine Zeichenfolge von zwei Zeichen (16 Bit) in ihre binäre konvertieren .. ord hilft mir nicht .. und mein derzeitiger Code ist nicht gut jetzt –

+0

mein Problem ist, dass Daten Zeichenfolge der Binärdatei enthält Darstellung und ich kann nicht damit arbeiten, es nicht einmal auf 16 Bits jedes Mal zu teilen, denn in der zweiten Zeile zählt es die Zeichen 0 und b des Präfix "0b10101" –

Antwort

0

Dies beantwortet Ihre Frage, vorausgesetzt, ich habe es richtig verstanden. Die ersten beiden Zeilen deines Codes scheinen nicht das zu tun, was du erreichen willst, aber vielleicht hast du einfach vergessen, etwas zu erwähnen.

Wie auch immer.

def checksum2(st): 
    dummy = 0xFFFF 
    for count in xrange(0,len(st),2): 
     dummy += ord(st[count])+ord(st[count+1])*256 
    return dummy 

Dieser Code Schritte durch jede zweite Zeichen der Zeichenfolge und fügt den Wert eines char auf den Wert der nächsten char mal 256, die ein Wort erzeugt. Entfernen Sie die *256, wenn Sie nicht wirklich einen richtigen 16-Bit-Wert erstellen wollten und stattdessen nur zwei 8-Bit-Werte hinzufügen wollten. Und wenn Sie eher eine big endian benötigen, anstatt little endian, dann bewegen Sie einfach die *256 die andere ord().

+0

danke es ist sehr nah für das, was ich brauche –

Verwandte Themen