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
Thema durchsuchen
Ansicht
Themen-Optionen

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.138 Beiträge
 
Delphi 11 Alexandria
 
#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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#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
Antwort Antwort


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 23:49 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