AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi HEX-string (Zweierkomplement) in Dezimal-string wandeln

HEX-string (Zweierkomplement) in Dezimal-string wandeln

Ein Thema von MarLe · begonnen am 23. Mär 2006 · letzter Beitrag vom 23. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2   
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#1

HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 09:54
... und umgekehrt.

Delphi-Quellcode:
var sHex: string;
    iDez: integer;
begin
  sHex:='$93E0';
  iDez:=StrToInt(sHex);
end;
... funktioniert bei der Darstellung im Zweierkomplement nicht
weil z.B. $93E0 = -27680 ergibt.

Mein Gedanke, den String in eine Binärzahl wandeln, das Highbit rausziehen, Vorzeichen auswerten,
invertieren und einen Einser addieren und dann wieder wandeln.

Hat das vielleicht schon jemand mal umgesetzt oder bin ich auf der falschen Fährte?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:00
Deklariere iDez mal als SmallInt...

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#3

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:01
Bei mir funktioniert das :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sHex: string;
    iDez: integer;
begin
  sHex:='$93E0';
  iDez:=StrToint(sHex);
  showmessage(inttostr(iDez)); // ergibt 37856
end;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:09
Wenn man statt Integer einen vorzeichenlosen Typen (Word oder Cardinal) nimmt, dann gibt es auch keine Probleme.

Grüße vom marabu
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:15
Mit seinem Quelltext erhält er bereits ein positives Ergebnis (getestet mit Delphi 2006).
Ich denke, daß er ein negatives Ergebnis erwartet.

Gruß Hawkeye
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:22
Hallo Hawkeye,

ich hatte die Frage so verstanden, dass aufgrund des gesetzten Highbit im HexString und die Verwendung von Integer (in D1 oder durch Typverbiegung 16bit) fälschlicherweise ein negativer Wert geliefert wird. Egal, wie es gemeint war, jetzt liegen ja alle eventuellen Lösungen vor...

marabu
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#7

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:31
Ich erwarte ein negatives Ergebnis.

@chrisw
$93E0 ergibt nicht 37856 sonder in der Zweierkomplement-Darstellung -27680 !!!

@Hawkeye219
Vom Wertebereich würde es passen.
SmallInt 16Bit mit Vorzeichen von +32767/-32768

Ich probier mal den Vorschlag von @marabu
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#8

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:38
Delphi-Quellcode:
var sHex: string;
    iDez: smallint;
begin
  sHex:='$93E0';
  iDez:=StrToInt(sHex);
  ShowMessage(IntToStr(iDez));
end;
... haut nicht hin.
Meldung: Konstantenausdruck verletzt untere Grenze

Wenn ich iDEZ als longint deklariere bekomm ich wieder den falschen Wert 37856 ?!?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:42
Hmmm.... Delphi arbeitet doch mit dem Einerkomplement oder?
Wenn ich nun einen HEX-String habe von dem ich weiss das er eine Darstellung im Zweierkomplement ist muss ich das doch umrechnen:
Delphi-Quellcode:
procedure TDemoForm.Button1Click(Sender: TObject);
var
  sHex: string;
  iDez: integer;
  neg : boolean;
begin
  sHex := '$93E0';
  iDez := StrToint(sHex);
  neg := (iDez AND $8000) = $8000;
  dec(iDez);
  iDez := iDez XOR $FFFF;
  if (neg) then
    iDez := iDEZ * -1;

  showmessage(inttostr(iDez)); // ergibt 37856
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#10

Re: HEX-string (Zweierkomplement) in Dezimal-string wandeln

  Alt 23. Mär 2006, 10:54
@Sharky
Das war auch mein Gedanke, Danke für die Bestätigung.
Dein Code funktioniert richtig

showmessage(inttostr(iDez)); // ergibt -27680 Hast du vielleicht auch noch gleich eine Lösung für den umgekehrten Weg,
von Dezimal nach Hex im Zweierkomplement?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 +1. Es ist jetzt 01:46 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