Avatar billede inglenook Praktikant
22. marts 2013 - 22:37 Der er 5 kommentarer og
1 løsning

Python - String

Python 2.6

Jeg har følgende streng:
010110101101100101101101 (der repræsenterer 24 bits)

Som jeg indlæser fra en fil og som jeg så skal have opdelt i 3 værdier. De første 4 bits, de næste 16 bits og endeligt de sidste 4 bits. Alle skal udskrives som hex værdier. Koden er:
  myFile = '/run/shm/rfintxt'
  if os.path.exists(myFile):
  with open(myFile,'r') as f:
    for line in f:
    myHead = hex(int(line[0:4],2))
    myID = hex(int(line[4:16],2))
    myCMD = hex(int(line[20:4],2))

senere printer jeg ud med:

  print 'line = %s' % (line)
  print 'myContrast = %d' % (myContrast)
  print 'myHead = %s' % (myHead)
  print 'myID = %s' % (myID)
  print 'myCMD = %s' % (myCMD)

myHead viser 0x5 (korrekt)
myID viser 0xad9 (skulle være 0xad96)

For myCMD får jeg fejlen:

myCMD = hex(int(line[20:4],2))
ValueError: invalid literal for int() with base 2: ''

Hvis jeg ændrer myCMD = hex(int(line[20:4],2)) til myCMD = line[20:4] får jeg kun en tom string. Det gør jeg også hvis jeg ændrer til line[8:4] eller andet.

Hvorfor ?

(P.S. Jeg har aldrig før brugt Python så det er sandsynligvis en rigtig dum fejl .........)
Avatar billede arne_v Ekspert
22. marts 2013 - 22:50 #1
proev:

      myID = hex(int(line[4:20],2))
      myCMD = hex(int(line[20:24],2))
Avatar billede inglenook Praktikant
22. marts 2013 - 23:01 #2
Perfekt. Læg et svar.

Kan du også fortælle hvordan jeg fjerner 0x fra mine hex værdier ?
Avatar billede arne_v Ekspert
22. marts 2013 - 23:12 #3
myCMD = hex(int(line[20:24],2))

->

      myCMD = hex(int(line[20:24],2))[2:]

eller:

      myCMD = hex(int(line[20:24],2)).lstrip('0x')
Avatar billede arne_v Ekspert
22. marts 2013 - 23:12 #4
og svar
Avatar billede inglenook Praktikant
22. marts 2013 - 23:14 #5
Never mind, har fået fjernet 0x. Bare læg et svar :)
Avatar billede inglenook Praktikant
22. marts 2013 - 23:15 #6
Hov, så ikke dit sidste svar, men mange tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester