binaer arbeiten

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
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...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich verstehe von deinem Anliegen nicht viel :oops: aber vielleicht hilft dir struct weiter? Kannst du auchmal im Forum nach suchen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Poste mal deine Sourcen... Bin neugirieg...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

mhhh na da muss ich nochmals durchdenken :D

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

gruss
BlackJack

Blindfisch, die Binärzahlen sind einfach nur verkehrt herum. :wink:
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

jetzt musst du nur noch anstatt 8-0 von 7-0 zähle (value auf 7 setzen) dann sollte es glaubs stimmen :)

Gruss
Antworten