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

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 2 von 2     12   
Benutzerbild von Sharky
Sharky

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

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

  Alt 23. Mär 2006, 11:05
Zitat von MarLe:
... Hast du vielleicht auch noch gleich eine Lösung für den umgekehrten Weg,
von Dezimal nach Hex im Zweierkomplement?
Der Weg von Dez -> Zweierkompliment ist ja:
  1. Zahl als Betrag (also ohne Vorzeichen)
  2. Bits invertieren
  3. Zahl um 1 erhöhen

Ergo müsste es so sein:
Delphi-Quellcode:
procedure TDemoForm.Button2Click(Sender: TObject);
var
  sHex: string;
  iDez: integer;
  neg : boolean;
begin
  iDez := -27680;
  neg := iDez < 0;
  if (neg) then
   iDez := iDez * -1; // In Betrag wandeln
  iDez := iDez XOR $FFFF; // Invertieren
  INC(iDez); // Um 1 erhöhen.
  sHex := IntToHex(iDez,4);
  showmessage(sHex);
end;
Das ganze kann/sollte man natürlich noch etwas opimieren. Ich wollte nur die einzelnen schritte zeigen.
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
 
#12

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

  Alt 23. Mär 2006, 12:02
Vielen Dank - funktioniert perfekt
  Mit Zitat antworten Zitat
Hawkeye219

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

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

  Alt 23. Mär 2006, 12:33
@Sharky
Delphi arbeitet mit dem Zweierkomplement:
Delphi-Quellcode:
+1 = 0000...0001
-1 = 1111...1111
Laut Wikipedia wird das Einerkomplement bei der Ganzzahlarithmetik nicht verwendet, weil es einige Nachteile mit sich bringt. Unter anderem gibt es für die Null zwei Binärdarstellungen.

@MarLe
Die Fehlermeldung konnte ich mit eingeschalteter Bereichsprüfung nachvollziehen. Seltsamerweise tritt der Fehler nicht auf, wenn man statt StrToInt() die Prozedur Val() verwendet. Das Ergebnis ist auch in diesem Fall korrekt.
  Mit Zitat antworten Zitat
MarLe

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

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

  Alt 23. Mär 2006, 13:02
Das ganze funktioniert auch nicht richtig wenn ich den Hex-Wert
über ein Eingabefeld (TEdit) übergebe:

Delphi-Quellcode:
sHex := '$93E0'; // ergibt -27680
sHex := EditsHex.Text; // eine Eingabe von $93E0 ergibt 37856 ?!?
Sorry, funktioniert schon, aber nur bei negativen Werten (siehe nächsten Beitrag)
  Mit Zitat antworten Zitat
MarLe

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

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

  Alt 23. Mär 2006, 14:32
Die Funktionen rechnen nur bei negativen Werten richtig.

Delphi-Quellcode:
Hex2Dec:
$55C8 -> 43576 falsch
$007F -> 65409 falsch
$0001 -> 65535 falsch
$FFFF -> -1 richtig
$FFF0 -> -16 richtig

Dec2Hex:
+21960 -> $AA2F falsch
  +127 -> $FF81 falsch
    +1 -> $FFFF falsch
    -1 -> $FFFF richtig
   -16 -> $FFF0 richtig

korrekte Werte wären:
$55C8 <-> +21960
$007F <-> +127
$0001 <-> +1
$FFFF <-> -1
$FFF0 <-> -16
Ich denke mal ich muss bei Hex2Dec vorher das Highbit (0 oder 1) auswerten.
Bei Dec2Hex das Vorzeichen, oder???
  Mit Zitat antworten Zitat
Hawkeye219

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

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

  Alt 23. Mär 2006, 15:03
Versuch's mal damit:
Delphi-Quellcode:
function Dec2Hex (aValue: integer): string;
begin
  Result := IntToHex(LoWord(aValue), 4);
end;

function Hex2Dec (const aValue: string): Integer;
  var code : Integer;
      temp : SmallInt;
begin
  Val (aValue, temp, code);
  Result := temp;
end;
Die Routinen liefern/erwarten 4-stellige Hexwerte und führen keine Fehlerüberprüfung durch.

Gruß Hawkeye
  Mit Zitat antworten Zitat
MarLe

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

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

  Alt 23. Mär 2006, 15:34
Vielen Dank, funktioniert.

Wie haut das bei 2- bzw. 8 stelligen Hex-Werten hin.
Hängt das Ergebnis der Funktion val() von der Deklaration der Variablen ab?
(SmallInt, ShortInt bzw. LongInt)
  Mit Zitat antworten Zitat
Hawkeye219

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

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

  Alt 23. Mär 2006, 15:42
Ja, scheint so zu sein.
Bei Dec2Hex nimmst Du dann Lo() für 2-stellige Hexwerte.

Gruß Hawkeye
  Mit Zitat antworten Zitat
MarLe

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

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

  Alt 23. Mär 2006, 15:51
Hätte ich jetzt auch gedacht. Aber
Result := IntToHex(LoWord(aValue), 2); liefert bei -40 $FFD8
  Mit Zitat antworten Zitat
Hawkeye219

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

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

  Alt 23. Mär 2006, 15:54
Lo(), nicht LoWord()
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:16 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