2017-11-14 2 views
0

Ich lerne, wie man den Code für DES-Verschlüsselung in Python schreibt. Ich stieß auf diesen Code auf Github (Link:), aber ich bin nicht in der Lage, einen Teil des Codes zu verstehen. (Siehe Zeile 123 im Github-Code, auch weiter unten :)Implementierung von DES in Python, kann nicht Teil des Codes verstehen

def binvalue(val, bitsize): #Return the binary value as a string of the given size 
    binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:] # this is line 124 I'm not getting 
    if len(binval) > bitsize: 
     raise "binary value larger than the expected size" 
    while len(binval) < bitsize: 
     binval = "0"+binval #Add as many 0 as needed to get the wanted size 
return binval 

Ich verstehe, was die Funktion macht (wie geschrieben: #Return den binären Wert als String der angegebenen Größe), aber ich verstehe nicht, wie es das macht, ich verstehe Zeile 124 nicht. Danke für die Antwort.

+0

was ist die Linie 124? –

+0

'binval =" 0 "+ binval': Sagen Sie dem Autor, dass' zfill() 'existiert. –

+0

Zeile124 von der Verbindung ist binval = bin (val) [2:] wenn isinstance (val, int) else bin (ord (val)) [2:] – sciencaholic

Antwort

2
binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:] 

diese Linie ist ein ternärer Ausdruck, den den binären Wertes von val Rückkehr, wenn val ganze Zahl ist, sonst es das gleiche tut, sondern auf dem ASCII-Code von val.

Dies ist ein Weg (unter anderem) mit Python 2 und Python kompatibel sein 3.

in Python 3 val eine ganze Zahl ist, als ein Teil eines bytes Daten, wenn val a 1-sized ist Zeichenfolge als Teil einer str Daten in Python 2, die keinen Unterschied zwischen binären & Zeichenfolge macht.

Kurz gesagt, dies ist eine portable Möglichkeit, ein Byte/Zeichen in seine Binärdarstellung als String umzuwandeln.

Beachten Sie, dass der Autor mehr über Python lernen könnte, da

while len(binval) < bitsize: 
     binval = "0"+binval 

konnte durch binval = binval.zfill(bitsize) ersetzt werden.

Verwandte Themen