AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GUID - Warum diese Darstellung als String

Ein Thema von bernau · begonnen am 19. Mär 2020 · letzter Beitrag vom 20. Mär 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

GUID - Warum diese Darstellung als String

  Alt 19. Mär 2020, 18:54
Einfach Interessehalber

Warum ist die String-Darstellung einer GUID so wie sie ist?

Also : "{12345678-ABCD-1234-ABCD-1234567890AB}".

Warum die Geschweiften klammern? Warum die Bindestriche? Genau so gut hätte man diese weg lassen können.

Sind 6 Byte in einem String, die eigentlich absolut sinnlos sind. Eine Speicherung ohne diese Zeichen würde doch nichts an der Eindeutigkeit ändern.

Also : "12345678ABCD1234ABCD1234567890AB".


Was hat man sich also dabei gedacht?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#2

AW: GUID - Warum diese Darstellung als String

  Alt 19. Mär 2020, 20:06
Hmm..

Das Format mit den Minuszeichen kommt vom Inhalt..

https://en.wikipedia.org/wiki/Univer...que_identifier

Zitat:
The canonical 8-4-4-4-12 format string is based on the record layout for the 16 bytes of the UUID:[2]

Die Klammen scheint sich Microsoft ausgedacht zu haben.

Zitat:
Microsoft GUIDs are sometimes represented with surrounding braces
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
128 Beiträge
 
Delphi 12 Athens
 
#3

AW: GUID - Warum diese Darstellung als String

  Alt 19. Mär 2020, 20:10
Hallo,

es gibt da schon unterschiedliche Darstellungen: https://www.it-visions.de/glossar/al...dentifier.aspx
Aber warum das so ist, wird dort auch nicht erklärt.
Vielleicht dienen die Bindestriche nur zur besseren Lesbarkeit, ähnlich wie bei der IBAN-Nr (alle 4 Zeichen folgt ein Leerzeichen).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: GUID - Warum diese Darstellung als String

  Alt 19. Mär 2020, 20:34
Aber warum das so ist, wird dort auch nicht erklärt.
Bei Wikipedia wie von HolgerX verlinkt steht doch die Erklärung. Da gibt es eine Tabelle zum UUID record layout, in der die einzelnen Teile erklärt werden.
Und so wurde diese Darstellung eben auch zum Standard für solche IDs generell, auch wenn sie etwas anderes enthalten.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: GUID - Warum diese Darstellung als String

  Alt 19. Mär 2020, 21:54
Die WIKI-Seite habe ich schon gelesen. Ich sehe auch, dass die Bindestriche die fünf Komponenten der GUID trennen.

Aber aus Lesbarkeit wird es kaum sein. Wer kann schon eine GUID "lesen" und dem Computer dürfte es bei vergleichen von zwei GUID Wurst sein, ob Bindestriche und Klammern vorhanden sind, oder nicht.

Der Link von ghubi01 zeigt aber auch, dass es verschiedene Darstellungsweisen gibt und die Art der Darstellung anscheinen Geschmacksache ist.

Ich dachte zuerst, die Darstellungsweise sei irgendwie optimiert um Vergleiche besser durchführen zu können. Ist aber anscheinend nicht so.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: GUID - Warum diese Darstellung als String

  Alt 20. Mär 2020, 06:47
Es ist Lesbarkeit, und die GUID setzt sich ja aus definierten Dingen zusammen, und folgt dabei einem festgelegten Format, das (wenn man es kennt) es ermöglicht, die einzelnen durch Bindestriche getrennten Blöcke auszuwerten.
Außerdem verwenden manche (zB Microsoft) GUIDs als Registriernummern, die man sich auch mal vorlesen muss.

O'Neill
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: GUID - Warum diese Darstellung als String

  Alt 20. Mär 2020, 08:57
Könnte man sich das nicht auch für 1000 andere Dinge fragen?
MAC-Adressen, IPs, Product-keys, ...
Ralph
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: GUID - Warum diese Darstellung als String

  Alt 20. Mär 2020, 09:14
Könnte man sich das nicht auch für 1000 andere Dinge fragen?
MAC-Adressen, IPs, Product-keys, ...
Ich frage mich auch warum 1 + 1 = 2 und nicht 11 oder 1 + 2 = 3 und nicht 12 sind.
Das könnte man so fort führen. Es ist nun mal so festgelegt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: GUID - Warum diese Darstellung als String

  Alt 20. Mär 2020, 09:32
Als Vorteil sehe ich die Lesbarkeit und eine gewisse Validierung, dass es sich vorliegend tatsächlich um eine GUID handelt und nicht einfach um einen String in der zufällig richtigen Länge.

Nachteilig ist natürlich der Speicherverbrauch und ggf. 1/2 ms längere Rechenzeit.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#10

AW: GUID - Warum diese Darstellung als String

  Alt 20. Mär 2020, 10:34
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Mär 2020 um 10:47 Uhr)
  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 05:32 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