Seite 1 von 1

binaer arbeiten

Verfasst: Freitag 12. August 2005, 09:59
von patrickk
Hallo,

erst mal Danke fuer die hilfe!
Bin schon weiter gekommen.

Ich habe einen String, der HEX Zeichen enthaelt. Leider muss ich dies biner aendern, da es so die Umwandlung nach Ascii nicht korrekt ist.
Wie macht man das am besten?
Wie wandel ich einen String nach binaer um?
binascii.a2b_hex(value)?
fuer jeden wert?

Dann muss ich von den ersten 8bit nur die linken 7 nehmen, und von dem naechsten vaule, dann das erste aus dem vorangegangenen und dann 6 aus dem naechsten...

Wie macht man das am besten in binaerform?

kann ich das irgendwie in eine form bringen in der ich z.B. mit val[2] af das dritt hoechste oder niedrigste Bit zugreife...


Danke,


Patrick

Zusammenfassung:

Will aus Hex binaer machen, auf die ich dann mit val zugreifen kann...

Verfasst: Freitag 12. August 2005, 11:20
von jens
Ich verstehe von deinem Anliegen nicht viel :oops: aber vielleicht hilft dir struct weiter? Kannst du auchmal im Forum nach suchen...

Verfasst: Freitag 12. August 2005, 11:26
von patrickk
Habe jetzt doch eine liste erstellt. Habe einfach eine kleine Tabelle gemacht 1-F und den passenden binary code. Und das dann in einen string gehaengt. Jetzt kann ich genau auf jedes bit zugreifen...

Danke,


Patrick

Verfasst: Freitag 12. August 2005, 11:27
von jens
Poste mal deine Sourcen... Bin neugirieg...

Verfasst: Freitag 12. August 2005, 17:02
von rayo
mhhh also wenn du einfach auf einzelne Bits zugreifen willst hilft dir vielleicht diese Funktion:

Code: Alles auswählen

def getBit(bit, value):
    return (value&(2**bit))>>bit
Beispielcode

Code: Alles auswählen

tmp = 8#entspricht in binär 0000 1000
print getBit(3,tmp)# ergibt 1 (fängt rechts an, von 0 bis 7)
Also das LSB ist Bit #0 und das MSB ist Bit #7

Gruss

PS: erklär mir nochmals was du genau mit diesen 7Bit und dann 6Bit oder so willst, da hab ich gar nix gerafft.

Verfasst: Montag 15. August 2005, 15:57
von jens
Hm... Das stimmt bei mir doch was nicht:

Code: Alles auswählen

def get_bit(bit, value):
    return (value&(2**bit))>>bit

def get_binary( bit, value ):
    result = [str( get_bit(i, bit) ) for i in xrange(value)]
    return "".join( result )

for i in xrange( 16 ):
    print "%4s - %s" % ( i, get_binary( i, 8 ) )

Code: Alles auswählen

   0 - 00000000
   1 - 10000000
   2 - 01000000
   3 - 11000000
   4 - 00100000
   5 - 10100000
   6 - 01100000
   7 - 11100000
   8 - 00010000
   9 - 10010000
  10 - 01010000
  11 - 11010000
  12 - 00110000
  13 - 10110000
  14 - 01110000
  15 - 11110000

Verfasst: Montag 15. August 2005, 16:39
von rayo
mhhh na da muss ich nochmals durchdenken :D

werde das gleich heute abend erledigen, jetzt seh ich den fehler nicht gerade auf anhieb

gruss

Verfasst: Montag 15. August 2005, 23:10
von BlackJack
Blindfisch, die Binärzahlen sind einfach nur verkehrt herum. :wink:

Verfasst: Montag 15. August 2005, 23:31
von rayo
ah ja stimmt ja alles

du gehst ja von 0 (LSB) bis 7 (MSB) durch und nicht wie gewollt von 7 zurück auf 0. Ach du verunsicherst mich total :D

Verfasst: Dienstag 16. August 2005, 06:57
von jens
Sorry, das war nicht extra :-) Ich kenn mich da auch nicht so aus...

Also so ist's dann richtig?

Code: Alles auswählen

def get_bit(bit, value):
    return (value&(2**bit))>>bit

def get_binary( bit, value ):
    result = [str( get_bit(i, bit) ) for i in xrange(value,0,-1)]
    return "".join( result )

for i in xrange( 16 ):
    print "%4s - %s" % ( i, get_binary( i, 8 ) )

Code: Alles auswählen

   0 - 00000000
   1 - 00000000
   2 - 00000001
   3 - 00000001
   4 - 00000010
   5 - 00000010
   6 - 00000011
   7 - 00000011
   8 - 00000100
   9 - 00000100
  10 - 00000101
  11 - 00000101
  12 - 00000110
  13 - 00000110
  14 - 00000111
  15 - 00000111

Verfasst: Dienstag 16. August 2005, 10:55
von rayo
jetzt musst du nur noch anstatt 8-0 von 7-0 zähle (value auf 7 setzen) dann sollte es glaubs stimmen :)

Gruss