Einzelnen Beitrag anzeigen

Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 28. Mär 2012, 16:19
Code:
void get_crc( unsigned char d )
{
  int i;

  crc ^= d;
  for( i = 8; i; i-- ){
    crc = (crc >> 1) ^ ((crc & 1) ? 0xA001 : 0 );
  }
}
Wenn ich mich nicht irre:
Delphi-Quellcode:
procedure get_crc(d: char);
var i: integer;
begin
  crc := crc xor d;
  for i := 8 downto 1 do
    if (crc and 1)<>0 then
      crc := (crc shr 1) xor $A001
    else crc := crc shr 1;
end;
//Edit: Peinlicher Fehler korrigiert

//Edit2: Erklärung
crc ^= d ist Kurzform für crc = crc ^ d , also XOR.
for( i = 8; i; i-- ) Teil 1+3 dürften klar sein, der mittlere Teil ist impliziter Cast in bool, ergo 0=false, sonst true.
crc = (crc >> 1) ^ ((crc & 1) ? 0xA001 : 0 ); Der Pfeil steht für ein Bitshift, das & für ein AND und die ?:-Schreibweise ist eine Inline-Bedingung. Auch hier wieder impliziter bool-Cast.

//Edit3: Man hätte den Code aber auch kürzer kriegen können:
Code:
void get_crc( unsigned char d )
{
  crc ^= d;
  for(int i = 8; i; i--)
    crc = (crc >> 1) ^ ((crc & 1) ? 0xA001 : 0 );
}
Klammern und Int-Zeile gespart.

Geändert von implementation (28. Mär 2012 um 16:34 Uhr)
  Mit Zitat antworten Zitat