Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Lahendatud: Python ja hex arvutamine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
priithansen
HV kasutaja

liitunud: 20.06.2002




sõnum 29.09.2010 00:07:06 Lahendatud: Python ja hex arvutamine vasta tsitaadiga

Vajan abi pythoni programmiga. See on mu esimene katsetud antud keeles (mõningane php kogemus ainult olemas)
Üritan kasutada Bitstring nimelist lisa pythonile, et teha vajalikud arvutused hex arvudega.

Siin on koodi näidis kõik nagu töötab va viimane funktsiooni ots kus oleks vaja crc + crcHigh + data kokku liita.

#!/usr/bin/python

#Import stuff for bit manipulation and serial connection
from bitstring import Bits, BitString
import serial

#Provided crc value
crc = BitString('0x147A')

#Data for test
data = BitString('0x09')


# Function to calculate the data packet
def crcCalc(crc,data):
   crc.rol(1)
   crc ^= BitString('0XFFFF')
   crcHigh = crc[0:8]
   result = crc + crcHigh + data
   return result


checksum = crcCalc(crc,data)

# Testing grounds
print checksum 


Viimane liitmine peaks siis olema 0xD70B + 0xD7 + 0x09 = D7EB
Minu program aga annab 0xd70bd709
Keegi nutikam ja pythoniga kursis olev oskab äkki nõu anda millega ma mööda panen

Aitäh


icon_idea.gif
Nii sain koodi endale sobivalt tööle. Millegipärast ei õnnestu kuidagi asju liita, kui nad on bin või hex vormingus.

Siin siis töötav kood. Mingit vastutust ei võta, et asi ka viisakalt lahendatud on.

#!/usr/bin/python

#Import stuff for bit manipulation and serial connection
from bitstring import Bits, BitString
import serial

#Provided crc value
crc = BitString('0x147A')

#Data for test
data = BitString('0x09')


# Function to calculate the data packet
def crcCalc(crc,data):
   
   crc.rol(1)
   crc ^= BitString('0XFFFF')
   crcHigh = crc[0:8]
   
   crcint = crc.uint + crcHigh.uint + data.uint
   
   result = hex(crcint)
   
   return result


checksum = crcCalc(crc,data)

# Testing grounds

print checksum
Kommentaarid: 10 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 10
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 29.09.2010 15:38:17 vasta tsitaadiga

Lihtsalt + operaatoriga ei saa sa neid kokku liita, kuna BitString klassi __add__ meetod on pandud just neid stringe kokku lükkama.
Bin ja hex vormingus liitmine ei toimi selle pärast, et vastavad atribuudid tagastavad stringi.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
priithansen
HV kasutaja

liitunud: 20.06.2002




sõnum 29.09.2010 18:17:34 vasta tsitaadiga

Tänud seletuse eest DoS. Hea teada ka miks asjad nii töötavad.
Kommentaarid: 10 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 10
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Lahendatud: Python ja hex arvutamine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.