2017-05-05 5 views
0

Ich habe versucht, ein kleines Python-Skript für den sha1-Algorithmus zu schreiben. Ich musste die globalen Variablen von h0 bis h4 initialisieren.Erstellen einer globalen Variable mit Python, ändert den Wert nach der Initialisierung

Nachdem der Wert der Ganzzahlen initialisiert wurde, ändert er sich zu einem anderen int für die Werte h0 und h3 und nicht für h1, h2 oder h4. Ich bin nicht sicher warum, wie eine schnelle Google-Suche zeigt, dass h0 und h3 keine Sonderzeichen sind.

Relevante Code:

h0 = 0 
h1 = 0 
h2 = 0 
h3 = 0 
h4 = 0 

#Initialize some variables 
def init_var(): 
    global h0 
    global h1 
    global h2 
    global h3 
    global h4 

    h0 = 01100111010001010010001100000001 
    h1 = 11101111110011011010101110001001 
    h2 = 10011000101110101101110011111110 
    h3 = 00010000001100100101010001110110 
    h4 = 11000011110100101110000111110000 

    print "\n\n\n h0", h0 
    print "h1", h1 
    print "h2", h2 
    print "h3", h3 
    print "h4", h4 

Wenn ich es in der Konsole zu drucken, gibt es:

[email protected]:~/sha1-hash-algorithm$ python testalgorithm.py 



h0 1393027350754575011593322497 
h1 11101111110011011010101110001001 
h2 10011000101110101101110011111110 
h3 19342823492383875910635592 
h4 11000011110100101110000111110000 

Kann mir jemand sagen, warum dies geschieht? Ist das ein besonderer Charakter in Python?

Ich habe ein Screenshot unterhalb des Ausgangs enthalten: enter image description here

Antwort

3

in Python Nummern beginnen mit 0 sind in der Basis 8 (Oktalzahlen).

>>> 011 
9 

011 gleich 1 * (8**1) + 1 * (8**0) = 9
0111 gleich 1 * (8**1) + 1 * (8**1) + 1 * (8**0) = 73

In Ihrem Fall, es funktioniert wie erwartet.

>>> h0 = 01100111010001010010001100000001 
>>> h0 
>>> 1393027350754575011593322497L 
1

@luoluo hat Ihnen den Grund gesagt. Wenn Sie also eine binäre Zahl einer Variablen zugewiesen werden soll, sollten Sie das Präfix verwenden: 0b

>>> a = 0b10010 
>>> print(a) 
18 
>>> a = 0b001010 
>>> print(a) 
10 

Und Sie sollten wissen, dass, wenn Sie eine binäre Zahl an die Konsole zu drucken, wird Python automatisch eine Dezimalzahl zeigen.

Verwandte Themen