Seite 1 von 1

HILFE!!!!! Binärcode und ASCII

Verfasst: Donnerstag 3. April 2003, 08:04
von Wingman128
Ich brauchedringend Hilfe!!
Sitze gerade in der Schule und brauche dringend einen Befehl um ASCII in Binärcode zuconvertieren und um Binärcode in ASCII!!!!

Kann mir irgendjemand helfen???

Danke

Re: HILFE!!!!! Binärcode und ASCII

Verfasst: Donnerstag 3. April 2003, 08:30
von Voges
Hallo!
Kannst Du die Frage nochmal präzisieren? Im einfachsten Falls suchst Du die build-in-Funktionen ord() und chr(). Oder geht es darum, eine Dezimalzahl in eine binäre Ziffernfolge umzuwandeln, also 42 in "01010100"?
Jan

Verfasst: Donnerstag 3. April 2003, 08:34
von Gast
es geht darum einen Dezimalstellung in binär.

Also 42 in "01010100"


Danke

Verfasst: Donnerstag 3. April 2003, 08:49
von Voges
Ok, also die (nicht optimierte) Lösung:

Code: Alles auswählen

def dez255ToBin(dez):
    ret = ""
    for hochX in (7,6,5,4,3,2,1,0):
        ret += "%d"%((dez & 2**hochX) > 0)
    return ret
    
print dez255ToBin(42)
Kurz: Es geht darum, die Zahlen 2**7, 2**6 ... 2**0 mit der Dezimalzahl bitweise UNDzuverknüpfen. Das geschieht mit dem Operator &. Spielt das Bit keine Rolle, ergibt ((dez & 2**hochX) > 0) 0, sonst 1.
Jan

Verfasst: Donnerstag 3. April 2003, 08:51
von Milan

Code: Alles auswählen

def dual(zahl):
    zahl=int(zahl)
    erg=''
    while zahl != 0:
        erg=str(zahl%2)+erg
        zahl=zahl/2
    return erg

def decimal(zahl):
    zahl=str(zahl)
    erg=0
    laenge=len(zahl)
    for i in xrange(laenge):
        erg+=int(zahl[i])*(2**(laenge-i-1))
    return str(erg)
bei beiden Funktionen übergibst du einen String, hoffe das hilft und ist das, was du wolltest

Verfasst: Donnerstag 3. April 2003, 08:56
von joerg
Ich habe für sowas mal ein Modul geschrieben, ist sicher viel zu fett für Deinen Zweck, aber mit etwas Geschick kannst Du die relevanten Teile übertragen:

Code: Alles auswählen

#!/usr/bin/env python
# $Id: BinaryTools.py,v 1.3 2003/03/11 13:22:30 joerg Exp $
import operator

version = '0.42'

# the value of a bit will not be calculated every time it is needed
# but stored in a cache list.
# initial cache for bitvalues, may be enlarged
_bitcache = map(lambda b: 2 ** b, range(32))


def _enlarge_bitcache(n):
    """enlarges internal _bitcache, will be called automatically.
    There's no need to call this function from outside"""
    for b in range(len(_bitcache), n):
        _bitcache.append(2 ** b)


def bit(i):
    """convert values to 0 or 1, depending on the truth value"""
    if i: return 1
    else: return 0


def bitsize(x, s=0):
    """give required bitsize to store the value x, s is the minimum size"""
    while x > (2 * _bitcache[-1] - 1):
        _enlarge_bitcache(len(_bitcache)+1)
    while s < len(_bitcache) and x > (2 * _bitcache[s] - 1):
        s += 1
    return s + 1


def bitmap(x, n=8):
    """return a bitlist from integer x, using n bits"""
    if n < len(_bitcache):
        _enlarge_bitcache(n)
    return map(lambda b: bit(x & b), _bitcache[:n])


def bstrip(l):
    """strip highest bits if not set"""
    s = l[:]
    while not s[-1]:
        del s[-1]
    return s


def ivalue(l):
    """return an integer from bitlist"""
    if len(l) > len(_bitcache):
        _enlarge_bitcache(len(l))
    return reduce(operator.add, map(lambda a, b: bit(a) * b, l, _bitcache[:len(l)]))


def bitstr(l):
    """return bitmap as string of zeros and ones"""
    return ''.join(map(str, l))


if __name__ == '__main__':
    print "\nThis is BinaryTools, version %s." % version

    # test overflow
    print "\nUsing 8 bit (default), will overflow at 256:"
    for x in range(250, 260):
        y = bitmap(x)
        z = ivalue(y)
        print '%3d -> %s -> %3d' % (x, bitstr(y), z)

    # test larger bitsize
    print "\nUsing 10 bit to cover larger values:"
    for x in range(250, 260):
        y = bitmap(x, 10)
        z = ivalue(y)
        print '%3d -> %s -> %3d' % (x, bitstr(y), z)

    # test bitlen
    print "\nRequired bitsize for numbers:"
    for x in range(1, 10):
        print "%d needs %d bit%c (%s)" % (x, bitsize(x), x==1 and ' ' or 's',
                                          bitstr(bstrip(bitmap(x))))

    # test large numbers
    print "\nNow testing real large numbers..."
    x = long('1234567890'*30)
    l = bitsize(x)
    b = bitmap(x, l)
    print "The number %d\nneeds %d bits, and has a binary representation of:\n%s" % (x, l, bitstr(b))
    if not ivalue(b) == x:
        raise Exception("Error during conversion")
Testcode hängt am Ende mit dran. Im Modul gibt es eine Cache für die Bitwerte (2**x), damit die nicht immer neu berechnet werden müssen, der Cache wird automatisch bei Bedarf vergrößert.

Die höherwertigen Bits stehen hier rechts, falls Du es anders brauchst, mußt Du das Ergebnis noch umdrehen.

Viel Spaß
Jörg

mit dieser vorlage buchstaben in bytedarstellung:

Verfasst: Dienstag 13. Mai 2003, 16:32
von Gast
hallo,

muss mit dieser vorlage ein lauffähiges program in python schreiben, dass buchstaben in bytedarstellung (01111001) umwandeln kann.
kann mir da einer helfen bitte?

anders rum d.h. bytedarstellung in buchstaben hab ich gecshafft, aber das weiss ich jetzt nicht.

mit ord irgendwie, aber weiter habe ich auch keine ahnung :(

Code: Alles auswählen

import math
import string
 
def eingabe2():

def dez2dual(dezimalzahl):

def ausgabe2(inv_dual_liste):
    while len(inv_dual_liste)<8:
        inv_dual_liste.append("0")
    inv_dual_liste.reverse()

    bytedarstellung=""
    for i in range(0,len(inv_dual_liste)):
        bytedarstellung = bytedarstellung + str(inv_dual_liste[i])

    print "Dualzahl: ", bytedarstellung

# Hauptprogramm
cu und danke

Verfasst: Mittwoch 14. Mai 2003, 16:18
von Pythonaya
Hey da,
ich hab nen ASCII, Dezimal, octal, Binär usw. Umwandler in Python geschrieben gehabt. Damals brauchte ich ihn für ein Informatikreferat. Er ist optisch und funktionell zwar voll ausgereift, aber ich habe weder nen uploadserver, noch hat er eine Fehlerabfrage... :cry:
Ich kann ihn dir als Mail schicken, wenn du mir deine Addy zu "privatmitteilst". :?:



Flo