Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   einen Hexwert umrechnen in einen Dezimalwert (https://www.delphipraxis.net/179336-einen-hexwert-umrechnen-einen-dezimalwert.html)

juergen 27. Feb 2014 18:59

einen Hexwert umrechnen in einen Dezimalwert
 
Hallo zusammen,

ich bin mir ziemlich sicher dass es eine fertige Funktion gibt, finde diese nur nicht.
Ich habe in einem String einen Hexwert. Diesen muss ich umrechnen in einen Dezimalwert.
Weiß da jemand Rat?

Vielen Dank schon mal vorab!

Volker Z. 27. Feb 2014 19:28

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo,

Zitat:

ich bin mir ziemlich sicher dass es eine fertige Funktion gibt, finde diese nur nicht [...]
Schau mal da: StrToInt

Gruß

juergen 27. Feb 2014 20:16

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo Volker,
vielen Dank für deine Hilfe! :thumb:
Da wäre ich jetzt nie drauf gekommen dass StrToInt() auch für Hexwerte gilt, aber in der Hilfe stehts so.

Jetzt hab ich noch ein Problem:
Ich muss 2 8stellige Hexwerte addieren...
Kann mir hierbei noch jenmand helfen?

Vielen Dank!

zeras 27. Feb 2014 20:21

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Zitat:

Zitat von juergen (Beitrag 1249934)

Jetzt hab ich noch ein Problem:
Ich muss 2 8stellige Hexwerte addieren...
Kann mir hierbei noch jenmand helfen?

Vielen Dank!

Dann wandle die Werte in Integer, addiere diese und wandle wieder zurück.
Meines Wissens musst du nur ein "$" vor den Hexwert setzen, damit dieser umgerechnet wird.

Volker Z. 27. Feb 2014 21:05

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo,

Zitat:

Ich muss 2 8stellige Hexwerte addieren [...]
Und was ist da jetzt genau das Problem? Falsches Ergebnis, weil die Summe den Wertebereich eines Int64 sprengt oder suchst Du IntToHex

Gruß

juergen 27. Feb 2014 21:15

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo Matthias,

danke für deinen Hinweise!

Ich habe es folgendermaßen versucht:

Delphi-Quellcode:
s := IntToStr((StrToInt('$' + (RightStr(sl_Quelle.Strings[0], 8)))) + (StrToInt('$' + ('00' + LeftStr(sl_Quelle.Strings[0], 6)))));

Zur Veranschaulichung ein Beispiel:
Hexwert 1 = 55 22 8D 04
Hexwert 2 = 00 80 2A D8

Diese beiden Werte addiert sollen
52 A2 B7 DC
ergeben.

Das muss ich dann noch in Dezimal umwandeln. Das Endergebnis soll
1386395612
sein.

@Volker,
ich habe natürlich einiges versucht, da gab es auch Wertebereichsverletzungen beim Int64

zeras 27. Feb 2014 22:27

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Zitat:

Zitat von juergen (Beitrag 1249949)
Zur Veranschaulichung ein Beispiel:
Hexwert 1 = 55 22 8D 04
Hexwert 2 = 00 80 2A D8

Diese beiden Werte addiert sollen
52 A2 B7 DC
ergeben.

Das muss ich dann noch in Dezimal umwandeln. Das Endergebnis soll
1386395612
sein.

Laut Rechner in Windows ergibt das Dezimal aber 1436727260???

zeras 27. Feb 2014 22:31

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mal auf einen Button gelegt
Delphi-Quellcode:


procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Caption := IntToStr(StrToInt('$55228D04') + StrToInt('$00802AD8'));
end;
Oder willst du mit Signed Werten arbeiten?

Volker Z. 27. Feb 2014 22:34

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo,

der Code hat nichts mit dem Beispiel zu tun. Wenn in sl_Quelle.Strings[0] 55228D04 steht, dann rechnet Dein Code $55228D04 + $0055228D, denn Du greifst doch auf den gleichen String zu (sl_Quelle.Strings[0])
Delphi-Quellcode:
ShowMessage (IntToStr (StrToInt ('$55228D04') + StrToInt ('$00802AD8'))); // Korrektes Ergebnis: 1436727260 [52A2B7DC]Hex
ShowMessage (IntToStr (StrToInt ('$FFFFFFFF') + StrToInt ('$FFFFFFFF'))); // Falsche Ergebnis: -2
ShowMessage (IntToStr (StrToInt64 ('$FFFFFFFF') + StrToInt64 ('$FFFFFFFF'))); // Korrektes Ergebnis: 8589934590 [1FFFFFFFE]Hex
Gruß

juergen 27. Feb 2014 23:08

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo zusammen ,
danke für das rege Interesse! :thumb:

@zeras
Mit dem Windowsrechner geht das wohl deswegen nicht, weil man bei dem 2. Wert keine führenden Nullen eingeben kann.

Leider weiß ich nicht was "Signed Werte" sind.

@ Volker
Ich greife auf einen Teil eines größeren Strings zu! Zum einen die letzten 8 Zeichen und zum anderen 2führende Nullen und die ersten 6 Zeichen des Strings.

Volker Z. 27. Feb 2014 23:32

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Hallo,

Zitat:

Mit dem Windowsrechner geht das wohl deswegen nicht, weil man bei dem 2. Wert keine führenden Nullen eingeben kann.
Das ist doch gar nicht nötig, die führenden Nullen zu berücksichtigen (55228D04 + 802AD8 = 55A2B7DC [entspricht 55228D04 + 00802AD8]).

Zitat:

Ich greife auf einen Teil eines größeren Strings zu! Zum einen [...]
Sorry, das RightStr/LeftStr habe ich irgendwie übersehen.

Mir ist allerdings immer noch nicht ganz klar wo Dein Problem jetzt eigentlich genau liegt

Gruß

BUG 28. Feb 2014 00:02

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Zitat:

Zitat von juergen (Beitrag 1249953)
Leider weiß ich nicht was "Signed Werte" sind.

signed heißt vorzeichenbehaftet :wink:

Ein prominentes Beispiel ist Delphi-Referenz durchsuchenInteger.

juergen 28. Feb 2014 06:41

AW: einen Hexwert umrechnen in einen Dezimalwert
 
Moin zusammen,

Problem ist gelöst!
Das Problem lag an den Grenzen der Zahlentypen.
Insbesondere da auch das Ergebnis den max. Integerwert überschreiten kann (ich hatte dort ab und an negative Ergebnisse).

Vielen Dank für die Unterstützung, im nachhinein ist es ganz einfach... ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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