AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign int32_t , int16_t in Delphi, Function nach Delphi übersetzen

int32_t , int16_t in Delphi, Function nach Delphi übersetzen

Ein Thema von bernhard_LA · begonnen am 15. Nov 2016 · letzter Beitrag vom 16. Nov 2016
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.003 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

int32_t , int16_t in Delphi, Function nach Delphi übersetzen

  Alt 15. Nov 2016, 21:47
wie würde man diesen Code in Delphi übersetzen


Delphi-Quellcode:
inline void gds (int32_t &i)
{
// ......
//  swap required
  char x;
  char *d = (char *)&i;
  x = d[0]; d[0] = d[3]; d[3] = x;
  x = d[1]; d[1] = d[2]; d[2] = x;

// ......
// other action
  i = (int32_t (((unsigned char *)&i) [0]) << 24) | (int32_t (((unsigned char *)&i) [1]) << 16) |
      (int32_t (((unsigned char *)&i) [2]) << 8)  |  int32_t (((unsigned char *)&i) [3]);
#endif
}
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: int32_t , int16_t in Delphi, Function nach Delphi übersetzen

  Alt 15. Nov 2016, 23:06
Da hast du ja wilden Code gefunden. Als erstes werden die Bytes von i umgedreht, wie bei einer Endianess-Konvertierung.

Der andere Abschnitt sieht ähnlich aus, hier wird wird aus dem Byte an der niedrigsten Adresse das signifikanteste Byte in einem 32bit IntegeR, usw... Könnte eine Konvertierung von Big-Endian zur Endianess des Sytems sein.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: int32_t , int16_t in Delphi, Function nach Delphi übersetzen

  Alt 15. Nov 2016, 23:45
Ich glaube, man könnte es so übersetzen:

Delphi-Quellcode:
function gds(i: LongInt): LongInt; inline;
var
  d: array[0..3] of Byte absolute i;
  x: Byte;
begin
// ......
// swap required
  x := d[0]; d[0] := d[3]; d[3] := x;
  x := d[1]; d[1] := d[2]; d[2] := x;

// ......
// other action
  i := (Int32(d[0]) shl 24) or (Int32(d[1]) shl 16) or (Int32(d[2]) shl 8) or (Int32(d[3]));
{$endif}
end;
Ungetestet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.588 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: int32_t , int16_t in Delphi, Function nach Delphi übersetzen

  Alt 16. Nov 2016, 04:11
Da fehlt ein #IF zum #ENDIF

Und ja, da war jemand bissl wirr im Kopf und hat die "selbe" Endianess-Konvertierung auf zwei Weisen umgesetzt.
Delphi-Quellcode:
procedure gds(var i: LongInt); inline;
begin
  // swap required
  i := ByteSwap(i); // sowas ähnliches, wie System.Swap
  
  // ......

  // other action
  i := ByteSwap(i);
end;
OHNE das "Heimliche" in den ... hebt sich das Gegenseitig auf und es kommt nix bei raus
Delphi-Quellcode:
procedure gds(var i: LongInt); inline;
begin
  //i := ByteSwap(i);
  //i := ByteSwap(i);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
143 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: int32_t , int16_t in Delphi, Function nach Delphi übersetzen

  Alt 16. Nov 2016, 07:38
Bytes swappen <asm>

Aus (http://www.delphipraxis.net/48884-fe...-delphi-2.html)

Code:
function SwapDWord(DW: DWord): DWord;
  asm
    {$IFDEF CPUX64}
    MOV EAX, ECX
    {$ENDIF CPUX64}
    BSWAP EAX
  end;
HTH!
Peter

Geändert von bytecook (16. Nov 2016 um 07:42 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 19:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf