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
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:
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
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.
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
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