PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FutureWarning bei x<<y



KRiusd
05.10.2006, 08:59
Hallo zusammen,

ich habe mir ein Script geschrieben das Dateien mit dem rijndael-Algorithmus verschlüsselt und wieder entschlüsselt!

Das Script funktioniert auch perfekt!
Allerdings bekomme ich beim ausführen mehrmals die meldung:


FutureWarning: x<<y losing bits or changing sign will return a long in Python 2.4 and up

Da das Script das tut was es soll ist es mir nun ehrlich gesagt egal ob ich das Problem der Warnung behebe oder nur den Output unsichtbar mache!

Allerdings weis ich weder beim Einen noch beim Anderen wie ich das anstelle! :hilfe2:

Bin für jede Hilfe dankbar! :)


Grüße KRiusd

supersucker
05.10.2006, 09:59
Poste mal die relevante Script-Stelle.

KRiusd
05.10.2006, 11:11
Ausgabe:

FutureWarning: x<<y losing bits or changing sign will return a long in Python 2.4 and up
r <<= 8

FutureWarning: x<<y losing bits or changing sign will return a long in Python 2.4 and up
tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \

1. Auftreten:

def mul4(a, bs):
if a == 0:
return 0
r = 0
for b in bs:
r <<= 8
if b != 0:
r = r | mul(a, b)
return r

2. Auftreten

tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \
(S[(tt >> 8) & 0xFF] & 0xFF) << 16 ^ \
(S[ tt & 0xFF] & 0xFF) << 8 ^ \
(S[(tt >> 24) & 0xFF] & 0xFF) ^ \
(rcon[rconpointer] & 0xFF) << 24

KRiusd
11.10.2006, 12:44
Gibt es keinen der damit was anfangen kann?

Wäre wirklich wichtig!

supersucker
11.10.2006, 12:53
Also ich von Python keine Ahnung.

Aber du hast offensichtlich google nicht oder falsch benutzt.

Wenn du einfach mal die Fehlermeldung in google reinpastest kriegst du z.B. sowas:


Das ist kein Fehler, sondern eine Warnung die besagt das in zukuenftigen
python-versionen (eben >2.4) bitshifts mittels << eine Vergroesserung der
Zahl erzeugen, falls sie ueber die Groesse von int hinaus gehen und dabit
potientiell Bits verloren gehen.

Du könntest also z.B. vor der Bitshift Operation prüfen ob das der Fall sein wird, und dementsprechend diesen Fall behandeln.

KRiusd
16.10.2006, 08:38
:D

Habe ich auch schon gefunden! ^^

Aber was soll ich da prüfen?
Bzw. wie soll ich was prüfen? ?(

Genau das ist mein Problem :D

satisfied
16.10.2006, 21:35
>>> import sys
>>> sys.maxint
Das gibt die maximale Integerzahl
Wenn du diese int Zahl mit << shift vergrößert, macht python eine long daraus
Zumindest bei mir macht python implizit einen cast nach long. Ob das bei >2.4 auch so ist, weiß ich nicht.

Gruß

KRiusd
23.11.2006, 10:35
Juhuuu!!!

Es ist wirklich so! Ab Version 2.4 wird automatisch ein direct Cast nach long durchgeführt wenn man eine Bitshift operation durchführt!

Habe alle relevanten Variablen mit long(x) initialisiert und schon sind die Meldungen weg!

Besten Dank

Grüße KRiusd