AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einfache Fall-Entscheidung bei hexadezimalen Werten?
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Fall-Entscheidung bei hexadezimalen Werten?

Offene Frage von "ryLIX"
Ein Thema von ryLIX · begonnen am 11. Feb 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:01
Hallo,
ich suche nach einer Möglichkeit schnell, anhand eines eingegebenen Wertes, zu ermitteln aus welchen Grundwerten sich dieser zusammen setzt.

Die Grundwerte habe ich vorgegeben. Diese sind 1,2,4,8 und C.
Der Bereich des eingegebenen Wertes erstreckt sich über die komplette hexadezimale Zahlenreihe (0-F).

Nun versuche ich eine Funktion zu finden die ohne Case oder If Struktur auskommt.
Welche Möglichkeiten habe ich da in Delphi/Pascal?
Da dieses Konstrukt aus Case oder If doch etwas groß wäre und auch ein wenig langsam. Oder irre ich mich da?
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:11
Hallo Markus,

meinst du so etwas?

Delphi-Quellcode:
if Odd(Value) then {1 vorhanden};
if Odd(Value shr 1) then {2 vorhanden};
if Odd(Value shr 2) then {4 vorhanden};
if Odd(Value shr 3) then {8 vorhanden};
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:14
Hallo,

was genau wird den eingegeben.

Ich vermute die Grundwerte sind die Einzelteile eines HEXA-Wertes.


Jetzt willst du erkenne, wenn jemand z.B 1C4C eingibt, welche zwei Grundwerte dahinter versteckt sind, Oder?

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:19
Hmm fast.
Eher so:

Eingabe: B
Dann sollten die Grundwerte zurück gegeben werden. Also 1,2 und 8.

Wie ich das ganze zwischenspeichere weiß ich im Moment noch nicht
Insgesamt ist das ein 16 stelliger Hexcode der eingegeben wird.

Ich hatte nun angefangen die einzelnen Stellen aufzutrennen und wollte die dann weiter verarbeiten.
Zur Zeit ist der Plan das ganze über eine Tabelle zu machen wo der Grundwert die Position im Schlüssel und der Textwert drin sind.

Da ich den HexCode auf Textwerte überstetzen möchte (mache derzeit noch von Hand).

Rote Kiste:

Ja so war das vorgesehen Jens.
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:28
Also wenn ich das dann jetzt verstanden habe, wäre dann folgendes Dein Ziel:

Eingabe B = Rückgabe 1,2,8
Eingabe C = Rückgabe C
Eingabe D = Rückgabe 1,4,8

Wenn das so wäre, kann man das doch mit einer case Anweisung lösen:

Delphi-Quellcode:
case Eingabe of

A: IrgendeinString := 2,8
B: IrgendeinString := 1,2,8
C: IrgendeinString := C

...

usw.
Vieleicht hilft dir das ja

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:35
Zitat von Jens Hartmann:
Also wenn ich das dann jetzt verstanden habe, wäre dann folgendes Dein Ziel:

Eingabe B = Rückgabe 1,2,8
Eingabe C = Rückgabe C
Eingabe D = Rückgabe 1,4,8

Wenn das so wäre, kann man das doch mit einer case Anweisung lösen:

Vieleicht hilft dir das ja

Gruß Jens
Das mit der Eingabe ist soweit korrekt.


Zitat von ryLIX:
Nun versuche ich eine Funktion zu finden die ohne Case oder If Struktur auskommt.
Welche Möglichkeiten habe ich da in Delphi/Pascal?
Da dieses Konstrukt aus Case oder If doch etwas groß wäre und auch ein wenig langsam. Oder irre ich mich da?


Die Idee mit Case oder If ist mir auch gekommen finds aber irgendwie Umständlich und ich hab den Verdacht das es irgendwie einfach geht.
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 19:44
Ich weiß nicht genau, da habe ich auch keine Ahnung,

aber vieleicht ginge sowas wie den HEX-Wert umzuwandeln

Delphi-Quellcode:

Label1.Caption := IntToHex(1000,4);
Das Ergebnis von oben wäre dann "03E8"

genauso, könntest du umgekehrt arbeiten

x := StrToInt('$03E8);
Das Ergebnis wäre wieder 1000

Ich hoffe das hilft Dir, ansonsten weiß ich auch nicht.

Gruß

jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 20:02
Der Schlüssel ist ja schon im HexFormat.

Code:
0000204406B01421
Nun setzt sich jede Stelle des Codes aus den Grundwerten zusammen.
Das auftrennen in einzelne Werte ist ja nicht das Problem.

Ich dazu eine Wertetabelle woraus ich ablesen kann welcher Grundwert an welcher Stelle welchen Text hat.
Das ganze hab ich mir in eine SQL Tabelle geschrieben um es mit dem Programm besser verarbeiten zu können.

Was mir nun halt Fehlt ist dieses erkennen der Grundwerte.
Für uns Menschen ja kein Problem aber wie man das einfach nach Delphi umsetzt ist mir nicht ganz klar.

Wenn keiner ne bessere Idee hat werd doch wohl auf das Case Modell zurück greifen.
Möchte nur ausschließen das es nicht "leichter" geht.
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 20:05
Sorry,

aber da weiß ich auch nicht weiter. Bin allerdings auch nicht der absolute Profi.
Vieleicht hast Du ja bei jemand anderem mehr Glück

Gruß

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Einfache Fall-Entscheidung bei hexadezimalen Werten?

  Alt 11. Feb 2009, 20:46
Markus, die Aufgabenstellung klingt für mich immer noch etwas widersprüchlich. Sei mir also nicht böse, wenn ich sie immer noch falsch verstanden habe:

Delphi-Quellcode:
procedure AnalyzeKey (const aKey: string);
var
  Msg : string;
  Map : string;
  Value : Integer;
  ch : Char;
begin
  Msg := 'Eingegebener Schlüssel: ' + aKey + #13#13;

  // alle Stellen des Schlüssels verarbeiten
  for ch in aKey do
    begin
      // eine Stelle in einen Zahlenwert umwandeln
      Value := StrToIntDef('$' + ch, 0);

      // Faktoren ermitteln, aus denen sich der Zahlenwert zusammensetzt
      Map := '';
      if Odd(Value) then Map := Map + '1 ';
      if Odd(Value shr 1) then Map := Map + ' 2 ';
      if Odd(Value shr 2) then Map := Map + ' 4 ';
      if Odd(Value shr 3) then Map := Map + ' 8 ';

      // Ergebnis an Ausgabetext anhängen
      Msg := Msg + #13 + ch + ' -> ' + Map;
    end;

  // Ergebnis ausgeben
  ShowMessage (Msg);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:57 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