Seite 1 von 1

Zahlen ins Binärformat umwandeln

Verfasst: Dienstag 11. September 2007, 07:13
von Bamba
Hallo,

ich suche nach einer Möglichkeit in Python Zahlen ins Binärformat umzuwandeln. Gibt es dafür eine bereits fertige Funktion?

Vielen dank!

KageMurai

Verfasst: Dienstag 11. September 2007, 07:28
von BlackJack
Nein, jedenfalls nicht in der Standardbibliothek. Aber hier im Forum und im Netz allgemein solltest Du fündig werden.

Verfasst: Dienstag 11. September 2007, 09:01
von veers

Code: Alles auswählen

import struct;
struct.pack("i", 0x29a);
:wink:

Verfasst: Dienstag 11. September 2007, 09:13
von BlackJack
Huch, da ist mir jetzt gar nicht aufgefallen dass die Frage zweideutig war. Ich habe an Zeichenketten mit 0en und 1en gedacht. :-)

Verfasst: Mittwoch 12. September 2007, 06:49
von Bamba
Hmm. Danke. Ich habe das jetzt so gelöst:

Code: Alles auswählen

while (erg!=0):
        if erg%2==0:
            erg=erg/2
            array.append(0)
        if erg%2==1:
            erg=erg/2
            array.append(1)
    array.reverse()
    print "Binaeres Ergebnis: "
    print array
Bamba[/code]

Verfasst: Mittwoch 12. September 2007, 07:57
von helduel
Moin,

ein bisschen Forensuche ergab das hier:

http://www.python-forum.de/topic-4524.html

Gruß,
Manuel

Verfasst: Mittwoch 12. September 2007, 08:19
von Zap
Hab mir auch vor einiger Zeit mal übers Forum hier ne Lösung zusammengesucht:

Code: Alles auswählen

import math 

def int_to_bin(value):
    """ 
    convert the given int value into a binary-string 
    example:  13 -> '1101'
    """
    bits = int((math.log(value)/math.log(2))+1) 
    return "".join(["01"[value>>x & 1] for x in xrange(bits-1,-1,-1)]) 

if __name__ == "__main__":
    print int_to_bin(input("int value: "))

Verfasst: Mittwoch 12. September 2007, 08:29
von BlackJack
Die Funktion mag keine 0:

Code: Alles auswählen

In [24]: int_to_bin(0)
---------------------------------------------------------------------------
<type 'exceptions.OverflowError'>         Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

/home/bj/<ipython console> in int_to_bin(value)

<type 'exceptions.OverflowError'>: math range error

Verfasst: Mittwoch 12. September 2007, 19:04
von Bamba
Hmm,

ich benutzte jetzt einfach mal meinen Code weiter, da er ja auch funktioniert. Trotzdem danke!

Ich habe dazu aber noch eine Frage:

Code: Alles auswählen

def binaer(char):
    array=[]
    ord(char)
    while (char!=0):
        if char%2==0:
            char=erg/2
            array.append(0)
        if char%2==1:
            char=erg/2
            array.append(1)
    array.reverse()
    print "Binaeres Ergebnis: "
    print array
    get_char()
Habe diesen Code, der ganz einfach nur einen buchstaben in binär umwandeln soll. Über get_char() lese ich einen buchstaben mit raw_input ein (also ganz einfach).

Wieso erhalte ich dann aber diese Fehlermeldung:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Sebastian\Desktop\Python\x.py", line 21, in <module>
get_char()
File "C:\Dokumente und Einstellungen\Sebastian\Desktop\Python\x.py", line 3, in get_char
binaer(char)
File "C:\Dokumente und Einstellungen\Sebastian\Desktop\Python\x.py", line 9, in binaer
if char%2==0:
TypeError: not all arguments converted during string formatting

Danke!

Verfasst: Mittwoch 12. September 2007, 19:15
von schlangenbeschwörer
Nunja, also "char" ist ein String und bleibt es auch, da gibts halt kein Modulo. "erg" wird auch nicht definiert. Dein Code funktioniert also doppelt nicht.

Verfasst: Mittwoch 12. September 2007, 19:18
von Bamba
Hallo,

tut mir wirklich leid, aber das war mein Fehler. Ich habe 1. das falsche gepostet und 2. einen dummen Fehler gemacht. Jetzt funktioniert alles:

Code: Alles auswählen

def binaer(char):
    array=[]
    char=ord(char)
    while (char!=0):
        if char%2==0:
            char=char/2
            array.append(0)
        if char%2==1:
            char=char/2
            array.append(1)
    array.reverse()
    print "Binaeres Ergebnis: "
    print array
    get_char()
Danke![/code]