#1 15. August 2009 C Code nach Python portieren Ok da ich so gut wie keine c Kenntnisse hab, wäre es nett wenn mir jemand ne kleine Funktion nach Python portert. Ist ein bisschen wenig für den "Ich suche Programmierer" Thread da es nur wenige Zeilen sind. Es handelt sich um die CRC Berechnung des YModem Transfer Protokolls: Code: int calcrc(char *ptr, int count) { int crc; char i; crc = 0; while (--count >= 0) { crc = crc ^ (int) *ptr++ << 8; i = 8; do { if (crc & 0x8000) crc = crc << 1 ^ 0x1021; else crc = crc << 1; } while(--i); } return (crc); } edit: es würde auch reichen, wenn mir jemand den code erklärt, denn irgendwie steig ich da nicht durch. + Multi-Zitat Zitieren
#2 16. August 2009 AW: C Code nach Python portieren das ist die normale crc-ccitt. wobei ich mir nich sicher bin, ob die normale nicht mit: Code: return (crc & 0xFFFF); den crc übergibt. << sollte shl (>> sollte shr) sein. hab mit python nicht gearbeitet, vom syntax könnts aber passen. *ptr gibt einfach den wert von dem pointer aus und (int) macht ne zahl draus (mit ++ wird nur auf den jeweils nächsten char gepointed). crc-16 - Python im ersten post eine mit table (mach ich in meiner crc64 routine auch, ist für dich aber wohl sinnlos, da zum createn 0xA001 als mask genommen wurde) und drunter eine die ähnlich aufgebaut ist wie dein c code (mask wählbar). (int) = ord() - pointer entfällt und ++ auch wg. for char << brauchste anscheinend doch net ändern. wenns dich interessiert wasses macht, kannste ja nach shl und shr googlen. Code: def updcrc(crc, data): for char in data: c = ord(char) c = c << 8 for j in xrange(8): if (crc ^ c) & 0x8000: crc = (crc << 1) ^ 0x1021 else: crc = crc << 1 c = c << 1 return crc & 0xffff aber wie gesagt: auf den return achten. + Multi-Zitat Zitieren