AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzen von 3 Zeilen C Code nach Delphi

Ein Thema von eric_draven · begonnen am 28. Mär 2012 · letzter Beitrag vom 29. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#1

Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 28. Mär 2012, 16:16
Delphi-Version: 5
Hi,

kann mir jemand bitte diesen (für mich) kryptischen C Code nach Delphi oder Pseudocode übersetzen ?
Code:
void get_crc( unsigned char d )
{
  int i;

  crc ^= d;
  for( i = 8; i; i-- ){
    crc = (crc >> 1) ^ ((crc & 1) ? 0xA001 : 0 );
  }
}
  Mit Zitat antworten Zitat
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
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Übersetzen von 3 Zeilen C Code nach Delphi

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

  crc ^= d;
  for( i = 8; i; i-- ){
    crc = (crc >> 1) ^ ((crc & 1) ? 0xA001 : 0 );
  }
}
Delphi-Quellcode:
procedure get_crc(d: DWord);
var
  i: Integer;
const
  v: Array[Boolean] of Word = (0; $A001);
begin
  crc := crc xor d;
  for i := 8 downto 1 do
    crc := (crc shr 1) xor v[(crc and 1)];
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (28. Mär 2012 um 16:25 Uhr)
  Mit Zitat antworten Zitat
eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#4

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 28. Mär 2012, 19:14
Klasse !
Danke für Eure Blitzantworten
Nun brauche ich das Ganze noch in asm für Atmel's, aber das bekomme ich hin. C ist leider nicht meine Stärke
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 01:45
Delphi-Quellcode:
const
  v: Array[Boolean] of Word = (0; $A001);
begin
  ...
  crc := (crc shr 1) xor v[(crc and 1)];
end;
Abgefahren
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#6

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 08:07
Delphi-Quellcode:
const
  v: Array[Boolean] of Word = (0, $A001); // mit Komma, nicht daß sich wer beschwert es funktioniere nicht.
begin
  ...
  crc := (crc shr 1) xor v[crc and 1 <> 0]; // <>0 , denn Delphi gibt es keine automatische Ordinal-Boolean-Konvertierung
  crc := (crc shr 1) xor IfThen(crc and 1 <> 0, 0xA001, 0);
  crc := (crc shr 1) xor IfThen(Odd(crc), 0xA001, 0);
end;
Eine syntaktisch korrekte Übersetzung gibt es leider nicht. (schade eigentlich), aber am Nächsten würde doch wohl Delphi-Referenz durchsuchenIfThen kommen.
Leider ist IfThen nur eine billige Funktion und keine so schöne native Operation, was einige Nachteile mit sich bringt.
- Funktionsaufrufe (Codesprünge)
- alle Parameter werden erst ausgewertet (in C wird nur der verwendete "Parameter" ausgewertet)

Also hier wäre, von der Ausführungsgeschwindigkeit her, das BoolArray natürlich besser.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mär 2012 um 09:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 08:13
*Unsinn*
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 14:47
@Himitsu
Danke schön. Habe auf Schönheitsfehler nicht geachtet und einfach darauf losgetippt ^_^

Aber so in etwas sollte das gehen.
Btw ein einfaches casten auf Boolean hätte ja auch geholfen, denn alles was <> 0 ist, ist true!
  crc := (crc shr 1) xor v[Boolean(crc and 1)]; (oder nicht?)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 15:00
crc := (crc shr 1) xor v[Odd(crc)];
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#10

AW: Übersetzen von 3 Zeilen C Code nach Delphi

  Alt 29. Mär 2012, 15:17
Btw ein einfaches casten auf Boolean hätte ja auch geholfen, denn alles was <> 0 ist, ist true!
Da mußt du immer etwas aufpassen.

crc ist 32 Bit und Boolean nur 8 Bit.
Falls Delphi hier keine Compilermagic versteckt hat, welche das Boolean logisch castet, anstatt es binär zu casten,
dann könnte es eventuell Probleme mit sowas geben, denn LongBool($FFFFFF00) <> Boolean($FFFFFF00) .
Aber zum Glück gibt es hier noch das and 1 , so daß in diesem Fall am Ende die oberen Bytes eh wegfallen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz