Zitat:
Das Format mit den Minuszeichen kommt vom Inhalt..
Jupp, denn die Bindestriche, bzw. die
Trennzeichen sind extrem wichtig, da die Byteorder zu beachten ist,
weil die Reihenfolge der Bytes im Speicher (Little-Endian > BinToHex) nicht mit den decodierten Werten (IntToHex > Big-Endian) übereinstimmt. (außer im alten MacOS)
Code:
LongWord Word Word Byte-Array
01234567-89AB-CDEF-0123-456789ABCDEF
67452301 AB89 EFCD 0123 456789ABCDEF
zum Selbstausprobieren
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
G: TGUID;
S, B: string;
begin
S := '01234567-89AB-CDEF-0123-456789ABCDEF';
G := StringToGUID('{' + S + '}');
SetLength(B, SizeOf(G) * 2);
BinToHex(G, PChar(B), SizeOf(G));
Insert(' ', B, 21);
Insert(' ', B, 17);
Insert(' ', B, 13);
Insert(' ', B, 9);
ShowMessage(S + sLineBreak + B);
end;
Ich werde wohl nur einfach nie kappieren, warum der vorletzte Block kein Word und somit nicht auch umgedreht wird,
jedenfalls nicht dank der aktuellen Typdefinition, wo ich's einfach beim kurz Hingucken immer überseh.
Delphi-Quellcode:
TGUID = packed record
D1: LongWord;
D2: Word;
D3: Word;
//D4: array[0..7] of Byte; // von Microsoft/Delphi
D4: array[0..1] of Byte; // meine Interpretation
D5: array[0..5] of Byte; // ...
end;
Zitat:
Sind 6 Byte in einem String, die eigentlich absolut sinnlos sind. Eine Speicherung ohne diese Zeichen würde doch nichts an der Eindeutigkeit ändern.
Dann speichere es binär und es ist nochmal die Hälfte an Bytes. Bei
Unicode sogar nur ein Viertel.
Sogar viele Datenbanken bieten einen
GUID-Typ, um es direkt formatunabhängig zu speichern und optimaler zu suchen.
Selbst der Delphi-Compiler bietet diese automatische Konvertierung schon seit Jahrzehnten, zumindestens teilweise bei Interfaces und Konstanten.
Delphi-Quellcode:
const
C: TGUID = '{01234567-89AB-CDEF-0123-456789ABCDEF}'; // hier ja
procedure TForm1.FormCreate(Sender: TObject);
var
G: TGUID;
begin
G := '{01234567-89AB-CDEF-0123-456789ABCDEF}'; // aber hier nicht :roll:
G := TGUID('{01234567-89AB-CDEF-0123-456789ABCDEF}'); // und so auch nicht
end;