Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C in Delphi Übersetzen (https://www.delphipraxis.net/90104-c-delphi-uebersetzen.html)

Olli 22. Apr 2007 01:08

Re: C in Delphi Übersetzen
 
Zitat:

Zitat von Mackhack
Warum ist denn hier das Array mit 33 Stellen gross deklariert und unten dann werden 37 Cellen mit 0 gefuellt?

Ach, das verstehst du nicht. Das ist künstlerische Freiheit.

Mackhack 22. Apr 2007 04:50

Re: C in Delphi Übersetzen
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Mackhack
Warum ist denn hier das Array mit 33 Stellen gross deklariert und unten dann werden 37 Cellen mit 0 gefuellt?

Ach, das verstehst du nicht. Das ist künstlerische Freiheit.

Very nice :???:

Gehstock 22. Apr 2007 13:55

Re: C in Delphi Übersetzen
 
Zitat:

Zitat von Mackhack
Warum ist denn hier das Array mit 33 Stellen gross deklariert und unten dann werden 37 Cellen mit 0 gefuellt?

Delphi-Quellcode:
IMEICC:array [0..32] of char;
Delphi-Quellcode:
for (i=0;i<37;i++)
  IMEICC[i]=0;

laut Orginal Code
Delphi-Quellcode:
char IMEICC[33];
ist das n
Delphi-Quellcode:
IMEICC:array [0..32] of char;
zumindest hab ich das so verstanden mit C hab ichs net so dicke

Mackhack 22. Apr 2007 16:09

Re: C in Delphi Übersetzen
 
@Gehstock:

Was hab ich denn anderes behauptet? Ich schrieb doch dass es als 33 zelliges Array deklariert wurde aber 37 Zellen mit 0en gefuellt wird!

Olli 23. Apr 2007 00:24

Re: C in Delphi Übersetzen
 
Zitat:

Zitat von Mackhack
Was hab ich denn anderes behauptet? Ich schrieb doch dass es als 33 zelliges Array deklariert wurde aber 37 Zellen mit 0en gefuellt wird!

memset() waere hier im Orginal IMO angebrachter. Mit dem sizeof-Operator ja dann auch sicher zu handhaben. Vermutlich eine nachtraegliche Aenderung im Code, wo man dann wieder sieht wozu der sizeof-Operator (der bekanntlich keine Runtimekosten hat) so gut ist.

Der_Unwissende 23. Apr 2007 08:53

Re: C in Delphi Übersetzen
 
Zitat:

Zitat von Olli
memset() waere hier im Orginal IMO angebrachter. Mit dem sizeof-Operator ja dann auch sicher zu handhaben.

Aber auch nur, wenn es sich wie hier um eine lokale Größe handelt. Spätestens beim Übergeben (der Adresse) an eine Routine steht man doch wieder vor dem Problem, dass ein Array in C (oder auch ein Memset) keine (automatische) Größenangabe besitzt. Natürlich hätte sizeOf hier geholfen, aber da es nicht benutzt wird, hat Mackhack doch Recht und der Code würde so zu etwas unerwarteten Möglichkeiten führen (je nachdem was gerade im Speicher überschrieben wird).

Gehstock 26. Apr 2007 21:10

Re: C in Delphi Übersetzen
 
Doppelposting

Gehstock 26. Apr 2007 21:13

Re: C in Delphi Übersetzen
 
Aktueller stand ist so
Delphi-Quellcode:
procedure TForm3.IMEI_code(IMEI: PChar; std,std1: PChar);
var IMEI_PATCH, IMEI74, IMEI9C: Array[0..16] of Char;
    IMEICC : Array[0..32] of Char;
    dest: Array[0..15] of Char;
    b,i: Integer;

begin
  std1 := 'DGL';
  b := 0;

  for i:= 0 to 15 do
   dest[i] := '0';
     fillchar(IMEICC[0],32,0); //for i:= 0 to 36 do IMEICC[i] := '0';
     //
  strCopy(@dest[0], std1);

  for i:=0 to 7 do begin
  b:=b+strtoint(IMEI[i+6]);
  IMEI_PATCH[i]:=IMEI[i+6];
  end;

  for i:=0 to 7 do begin
//  IMEI_PATCH[i+8]:=$64-IMEI_PATCH[i];
  end;
  IMEI_PATCH[16]:='0';

  Case b mod 3 of
  0:for i:=0 to 15 do begin
    IMEI74[i]:=IMEI_PATCH[i];
     break;
      end;// 0
  1:for i:=0 to 15 do begin
    IMEI74[15+i]:=IMEI_PATCH[i+1];
     break;
     end;// 1
  2:for i:=0 to 15 do begin
    if i mod 2 = 0 then begin
      IMEI74[i]:=IMEI_PATCH[i+1];
      end;
  end
       else Begin
        IMEI74[i]:=IMEI_PATCH[i-1];
  end; // 2
   End; //CASE of
    strcat(dest,std);
    strcat(dest,std1);
    strcat(dest,std);

      for i:=0 to 15 do begin
//        IMEI9c[i]:=(IMEI74[i]+dest[i])mod 100;
      end;
      IMEI74[16]:='0';
      IMEI9c[16]:='0';
   Case b mod 10 of
  1:for i:=0 to 7 do begin
//    IMEICC[i*4]:=(IMEI74[i*2] or dest[i*2] or IMEI9c[i*2] or IMEI9c[i*2]) mod 10;
     break;
  end;//1
  2:for i:=0 to 7 do begin
//    IMEICC[i*4]:=(IMEI74[(i*2)+1] or dest[(i*2)+1] or IMEI9c[(i*2)+1] or IMEI9c[(i*2)+1]) mod 10;
    break;
  end;//2
  3:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[i*2] or dest[i*2]) and IMEI9c[i*2] or IMEI9c[i*2]) mod 10;
    break;
  end;//3
  4:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[(i*2)+1] or dest[(i*2)+1]) and IMEI9c[(i*2)+1] or IMEI9c[(i*2)+1]) mod 10;
    break;
  end;//4
  5:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[i*2] or dest[i*2] or IMEI9c[i*2]) and IMEI9c[i*2]) mod 10;
    break;
  end;//5
  6:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[(i*2)+1] or dest[(i*2)+1] or IMEI9c[(i*2)+1]) and IMEI9c[(i*2)+1]) mod 10;
    break;
  end;//6
  7:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[i*2] and dest[i*2]) or IMEI9c[i*2] or IMEI9c[i*2]) mod 10;
    break;
  end;//7
  8:for i:=0 to 7 do begin
//    IMEICC[i*4]:=((IMEI74[(i*2)+1]) and dest[(i*2)+1] or IMEI9c[(i*2)+1] or IMEI9c[(i*2)+1]) mod 10;
    break;
  end;//8
  9:for i:=0 to 7 do begin
//    IMEICC[i*4]:=(((IMEI74[i*2] and dest[i*2]) or IMEI9c[i*2]) and IMEI9c[i*2]) mod 10;
    break;
  end;//9
  else
    for i:=0 to 7 do begin
//    IMEICC[i*4]:=(((IMEI74[(i*2)+1] and dest[(i*2)+1]) or IMEI9c[(i*2)+1]) and IMEI9c[(i*2)+1]) mod 10;
    break;
  end;//else
   End; //Case of
  end; //Procedure
da sind noch einige sachen wo ich net weiterkomm

DGL-luke 27. Apr 2007 13:17

Re: C in Delphi Übersetzen
 
Hallo,

wenn du nicht darauf angewiesen bist, das ganze zu C kompatibel zu halten oder das in eine DLL packen willst, dann mach aus den PChars einfach strings. dann kannst du die bei dir noch auskommentierten sachen praktisch 1 zu 1 übernehmen, du musst nur darauf achten, dass der zugriff in C 0-basiert und der string-zugriff in Delphi 1-basiert ist, d.h., du musst alle indizes um eins erhöhen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz