HILFE!!!!! Binärcode und ASCII

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Gast

es geht darum einen Dezimalstellung in binär.

Also 42 in "01010100"


Danke
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Zuletzt geändert von Milan am Donnerstag 3. April 2003, 12:58, insgesamt 1-mal geändert.
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

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
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
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

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
Antworten