Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] VB -> php

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] VB -> php

    Hallo!

    Ich möchte folgene VB Code zum erstellen eine CRC16 Lookup Tables in php implementieren:

    PHP-Code:
      Dim CRCT(0 To 255) As Long       ' Codetabelle für CRC-16-Check
      Dim CRC As Long                  ' 
    Kurzzeitige Verwendung
      Dim i 
    as Integer                 ' Schleifenvariable
      Dim j as Integer                 ' 
    Schleifenvariable

      
    For 0 To 255
          CRC 
    i
          
    For 1 To 8
             
    If (CRC And 1) = 1 Then
                CRC 
    Fix(CRC 2) Xor 33800
             
    Else
                
    CRC Fix(CRC 2)
             
    End If
          
    Next j
          CRCT
    (i) = CRC
       Next i 
    bei mir schaut das dann so aus:

    PHP-Code:
     // CRC Table aufbauen
     
    $crct = array();
     for(
    $i 250;$i <= 255;$i++) {
      
    $crc $i;
      for(
    $j 1;$j <= 8;$j++) {
       if ((
    $crc && 1) == 1) {
        
    $crc bcdiv($crc22) xor 33800;
       } else {
        
    $crc bcdiv($crc22);
       }
      } 
    // J schleife
      
    $crct[$i] = $crc;
     } 
    // i schleife 
    Das ergebniss ist ein 256 stelliges array gefüllt mit nullen- was sicherlich nicht korrekt ist. bin leider nicht bewander in vb aber habe so gut es geht mich informiert. irgendwo steckt noch ein fehler drinne, seht ihr ihn??

  • #2
    geht es dir darum das genau so zu implementieren ? oder gehts dir um crc16 ?

    Da findest du in den User Contributed Notes Code zu crc16
    -> PHP: crc32 - Manual

    Kommentar


    • #3
      Eigentlich geht es nur um CRC16, allerdinggs CRC16-XMODEM, das ein anderes Polynom verwendet als das Beispiel im manual- habe bereist Versucht dieses Beispiel umzuschreiben, leider ohne Erfolg (CRC16 = x16 + x12 + x5 + 1 CRC16XMODEM = x16 + x15 + x10 + x3).

      Der gesammt VB Code zu CRC16XMODEM ist hier

      Hier noch die gesammt Implementation, aber der Table ist schon leer..

      PHP-Code:
      function crc16_vb($data)
      {
       
      // CRC Table aufbauen
       
      $crct = array();
       for(
      $i 250;$i <= 255;$i++) {
        
      $crc $i;
        for(
      $j 1;$j <= 8;$j++) {
         if ((
      $crc && 1) == 1) {
          
      $crc bcdiv($crc22) xor 33800;
         } else {
          
      $crc bcdiv($crc22);
         }
        } 
      // J schleife
        
      $crct[$i] = $crc;
       } 
      // i schleife
       // var_dump($crct);
       // berechnen
       
      $crc 0;
       for(
      $i 0;$i <= strlen($data);$i++) {
        
      $hb floor(bcdiv($crc2562));
        
      $lb bcsub($crcbcmul(256$hb));
        
      $j $lb xor ord(substr($data$i1));
        
      $crc $crct[$j] xor $hb;
       }
       
      $hb floor(bcdiv($crc2562));
       
      $lb bcsub($crcbcmul(256$hb2), 2);
        echo 
      "$hb - $lb";
       return 
      true;

      Kommentar


      • #4
        Bitte ändere deinen Threadtitel noch in etwas aussagekräftiges. Danke.

        Kommentar


        • #5
          ^ statt xor verwenden
          $crc&1 statt $crc&&1, wahlweise $crc%2
          nach (int) casten.

          PHP-Code:
          $crct = array();
          for(
          $i 0$i<=255$i++) {
            
          $crc $i;
            for(
          $j=0$j<8$j++) {
              if ( 
          $crc&) {
                
          $crc = (int)($crc/2) ^ 33800;
              }
              else {
                
          $crc = (int)($crc/2);
              }
            }
            
          $crct[$i] = $crc;
          }

          print_r($crct); 

          Kommentar


          • #6
            Vielen Dank!

            PHP-Code:
            function crc16_vb($data)
            {
             
            // CRC Table aufbauen
             
            $crct = array();
             for(
            $i 0;$i <= 255;$i++) {
              
            $crc $i;
              for(
            $j 1;$j <= 8;$j++) {
               if ((
            $crc &1) == 1) {
                
            $crc = (int)($crc 2) ^ 33800;
               } else {
                
            $crc = (int)($crc 2);
               }
              } 
            // J schleife
              
            $crct[$i] = (int)$crc;
             } 
            // i schleife  
             // berechnen
             
            $crc 0;
             for(
            $i 0;$i <= strlen($data);$i++) {
              
            $hb = (int)floor((int)($crc 256));
              
            $lb = (int)$crc - (int)(256 $hb);
              
            $j $lb ord(substr($data$i1));
              
            $crc $crct[$j] ^ $hb;
             }
             
            $hb = (int)floor((int)($crc 256));
             
            $lb = (int)$crc - (int)(256 $hb);

             return array(
            'HB' => $hb'LB' => $lb);

            ist der resultierende code. sieht gut aus, danke

            Kommentar

            Lädt...
            X