[Code] C Code nach Python portieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MasterJulian, 15. August 2009 .

  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.
     
  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.
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.