Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hexadezimale Zahl in Registry speichern (https://www.delphipraxis.net/168170-hexadezimale-zahl-registry-speichern.html)

Pentium 80486 8. Mai 2012 17:17

Hexadezimale Zahl in Registry speichern
 
Guten Abend allerseits,

ich versuche gerade verzweifelt eine Zahl 1031 als hexadezimale Zahl in die Registry zu schreiben.
Mit WriteInteger('Test', StrToInt(IntToHex(1031, 1))); wird lediglich 7 gespeichert, aber nicht die erhoffte Zahl 407.

Woran kann das liegen?

p80286 8. Mai 2012 17:34

AW: Hexadezimale Zahl in Registry speichern
 
An der Eins?
z.B. wäre "1031,4" brauchbar.
aber verate uns doch einmal was diese Hinundherkonvertierung soll:
Delphi-Quellcode:
StrToInt(IntToHex(1031, 1));
Gruß
K-H

Pentium 80486 8. Mai 2012 17:54

AW: Hexadezimale Zahl in Registry speichern
 
WriteInteger verlangt einen Integer und IntToHex liefert einen String. Daher StrToInt.

Bummi 8. Mai 2012 17:57

AW: Hexadezimale Zahl in Registry speichern
 
und warum schreibst Du nicht einfach 1031....

Pentium 80486 8. Mai 2012 17:58

AW: Hexadezimale Zahl in Registry speichern
 
Es geht hier genau gesagt um die Sprach-IDs.

Deutsch hat da die 407.
Durch folgende Funktion erhalte ich dann 1031, dezimal nehme ich an. Ich brauchre aber die 407.

Delphi-Quellcode:
var
  txt : string;
  langid : word;
begin
  langid := MAKELANGID(LANG_SPANISH,
    SUBLANG_SPANISH_DOMINICAN_REPUBLIC);

  SetLength (txt,MAX_PATH);
  SetLength (txt,
    VerLanguageName(langid,@txt[1],length(txt)));
  ShowMessage(txt);
end;
http://www.delphipraxis.net/46643-post.html

shmia 8. Mai 2012 18:04

AW: Hexadezimale Zahl in Registry speichern
 
Folgende Varianten stehen zur Auswahl
Delphi-Quellcode:
WriteInteger('Test', 1031);                  // A
WriteInteger('Test', $407);                  // B
WriteString('Test', Format('%x', [1031]);    // C
Variante A und B machen genau das Gleiche.
Variante C schreiben den Wert 1031 als hexdezimalen string.

Ach ja, du sollst uns nicht erzählen was du über deinen eigenen Code denkst sondern
sag uns lieber den kompletten Key (z.B. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\W32Time\Config)
innerhalb der Registry und warum und weshalb du dort etwas reinschreiben möchtest.
Und natürlich auch welchen Datentyp der Schlüssel in der Registry hat.

Pentium 80486 8. Mai 2012 18:09

AW: Hexadezimale Zahl in Registry speichern
 
Tut mir leid, habe ich wohl vergessen.

Ist aber auch nicht weiter wichtig.
Die Variable, welche zuvor 1031 entheilt, hatte den Datentyp ShortInt. Ein Wechsel zu Integer hat Abhilfe geschaffen. Warum jedoch verstehe ich nicht.
Die sind doch beide unsigned :?

DeddyH 8. Mai 2012 18:10

AW: Hexadezimale Zahl in Registry speichern
 
BTW: Es gibt weder dezimale noch oktale noch hexadezimale Zahlen, sondern nur die entsprechende Darstellung einer Zahl.

Popov 8. Mai 2012 20:32

AW: Hexadezimale Zahl in Registry speichern
 
Ich sehe immer noch nicht das eigentliche Problem:

Delphi-Quellcode:
  ShowMessage('$' + IntToHex(1031, 0) ); //Ergibt $407
  ShowMessage('$' + IntToHex(1031, 2) ); //Ergibt $407
  ShowMessage('$' + IntToHex(1031, 4) ); //Ergibt $0407
  ShowMessage('$' + IntToHex(1031, 6) ); //Ergibt $000407
  ShowMessage('$' + IntToHex(1031, 8) ); //Ergibt $00000407

  //WriteString('Test', IntToHex(1031, 1));  //als String speichern, nicht Integer
Edit: Ok, ich sehe das Problem war schon gelöst

DeddyH 9. Mai 2012 07:03

AW: Hexadezimale Zahl in Registry speichern
 
ShortInt ist nicht unsigned und geht von -128..127. Dass da keine 1031 reinpasst, sollte klar sein.

Furtbichler 9. Mai 2012 07:59

AW: Hexadezimale Zahl in Registry speichern
 
Zitat:

Zitat von DeddyH (Beitrag 1165497)
ShortInt ist nicht unsigned und geht von -128..127. Dass da keine 1031 reinpasst, sollte klar sein.

Hast Du es schon mal mit bytefolding probiert? Du musst die Bytes übereinander falten, dann passt das. Es ist eine Art mehrdimensionales XOR auf Quantenbasis. Die Algorithmen befinden sich allerdings noch in der Ichfindungsphase :mrgreen:

Popov 9. Mai 2012 08:38

AW: Hexadezimale Zahl in Registry speichern
 
Genau!
Delphi-Quellcode:
var
  i: Integer;
  k: ShortInt;
begin
  i := 1031;
  k := i;
  ShowMessage(IntToStr(k));
end;
Ergebnis ist 7

Oder
Code:
1031 - 128 - 128  - 128  - 128  - 128  - 128  - 128  - 128 = 7

DeddyH 9. Mai 2012 08:41

AW: Hexadezimale Zahl in Registry speichern
 
Logisch, für 1031 brauchst Du mindestens 11 Bit, ShortInt hat aber nur 8.

himitsu 9. Mai 2012 08:54

AW: Hexadezimale Zahl in Registry speichern
 
Und soll das nun wirklich als "String mit der hexadezimalen Darstellung einer Zahl" in die Registry
oder nicht doch einfach nur als "Integer DWORD" ?


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