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

binaer arbeiten

Beitragvon patrickk » Freitag 12. August 2005, 09:59

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[i] zugreifen kann...
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 12. August 2005, 11:20

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
patrickk

Beitragvon patrickk » Freitag 12. August 2005, 11:26

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 12. August 2005, 11:27

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

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

Beitragvon rayo » Freitag 12. August 2005, 17:02

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 15. August 2005, 15:57

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

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

Beitragvon rayo » Montag 15. August 2005, 16:39

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

Beitragvon BlackJack » Montag 15. August 2005, 23:10

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:

Beitragvon rayo » Montag 15. August 2005, 23:31

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 16. August 2005, 06:57

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

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

Beitragvon rayo » Dienstag 16. August 2005, 10:55

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

Gruss

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]