GUIDには何文字ありますか?


82

ASCIIエンコーディングを使用すると、GUIDには何文字ありますか?

中括弧とダッシュを含むMicrosoftスタイルに興味があります。


2
それらはすべてまったく同じ長さです。1つの文字を数えると、すべての文字の長さがわかります。
Greg Hewgill

1
@ Greg-長さが変わらないことを理解していない限り、これは非常に悪い仮定です。
Adam Davis

8
長さが異なる場合、この質問は「弦の長さはどれくらいですか?」と尋ねるようなものになります。代わりに、これは「ダースに何個の卵がありますか?」と尋ねています。
Greg Hewgill

8
私がこの質問をグーグルで検索したとき、すべての回答はGUIDの定義を示していました。必要に応じて私に反対票を投じてください。しかし、私はこの特定の質問に対する答えを見つけやすくすることを目指しており、将来の質問者を数える必要はありません。
ジムは

2
あなたの言っていることは理解できますが、誰かがNewDataXを紹介されたばかりの場合、長さに関する質問は有効であり、NewDataXが何であるかを理解するまで、あなたが見たものが他のすべてのNewDataXを例示しているとは限りません。
Adam Davis

回答:


130

MSDNから:

GUIDは、8桁の16進数の1つのグループ、4桁の16進数の3つのグループ、12桁の12桁の1つのグループで構成される128ビット値です。次のGUIDの例は、GUID内の16進数のグループ化を示しています。6B29FC40-CA47-1067-B31D-00DD010662DA

ウィキペディアから:

多くの場合、上記の形式を囲むために中括弧が追加されます。

{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

したがって、中括弧を使用した一般的な16進エンコーディングでは合計38文字です。

-アダム


@ magnifico-この回答の最後の段落を参照してください:「つまり、中括弧を使用した一般的な16進エンコーディングでは合計38文字です。」
Randolpho

1
マグニフィコと戦う必要はありません-彼は質問をしました、彼は誰が最も適切な答えをしたかを決めることができます。彼には、これに対する他の答えを好む理由があると私は確信しています。
Adam Davis

@Beskaは、StackOverflowの目的だからです。一人に魚を渡す代わりに、同じ魚を百万人に渡します。
バグローフ2013

@bugloafうーん。私のコメントは両方とも、現在のコンテキストでは意味がないため、削除されたものに関連していると思われます...そして最初のコメントは、特に何かがなくなったことに対する応答でした。私はそれらを取り除きました。(現在の状況では、私は答えに反対しているように見えました。これは良い答えであり、私には意味がなく、あなたは正しく呼びかけていました。)
Beska 2013

@AdamDavis私は38ではなく32を数えます。編集:中括弧とダッシュを数えている必要があります。気にしないでください。
KyleM 2013年

32

TL; DR:なし。

Adam Davisが述べたように、MicrosoftスタイルはASCII文字のサブセット(0-9およびAF)を使用して表示できるHEXエンコーディング(中括弧とダッシュを使用して読みやすくする)ですが、これは特にASCIIエンコーディングではありません。

GUIDを表示するMicrosoftスタイルは、実際には16バイトの整数値であるGUIDの表現にすぎないことを覚えておくことが重要だと思います(Micheal Trauschが述べたように)。

バイトを別の文字セット(ASCIIなど)に変換することで、さまざまな、よりコンパクトな方法で表示することもできます。

理論的には、各バイトを拡張ASCII文字(255文字)として表示できます。これにより、GUIDを16文字の長さの文字列として保存できます。

ただし、空白文字(CR、スペース、タブなど)やその他の特殊文字が含まれるため、あまり読みにくくなります。したがって、これは、GUIDを人間が読めない文字形式で効率的に保存する場合にのみ意味があります。 、たとえば、GUIDまたは小さなバイナリ値の高速マッチングをネイティブにサポートしていないデータベースの場合:http//en.wikipedia.org/wiki/Extended_ASCII

GUIDをよりコンパクトに表示するための最も読みやすい方法は、Base64エンコーディングを使用することです。これにより、22文字の長さの文字列に保存でき、次のようになります。

7v26IM9P2kmVepd7ZxuXyQ==

しかし、Jeff Atwoodが彼のサイトで述べているように、GUIDを20文字のASCII85エンコード文字列にプッシュすることもできます。

[Rb*hlkkXVW+q4s(YSF0

詳細については、http//www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.htmlを参照して ください。


3
:私はここにC#でのアスキー-85エンコーダ/デコーダ掲載stackoverflow.com/questions/2827627/...
sheikhjabootie

1
この回答だけが、読者を餌にし、TL; DRとして機能するために、上部に大きくて大胆な「なし」があった場合。;)
jpmc26 2017年

14

AdamがMSDNの引用から述べたように、UUIDは128ビット値です。これは、値を保持するために16バイトのRAMを必要とすることを意味します。テキスト表現には、32バイト(1バイトごとに2バイト)、4つのハイフン、およびそれらを含める場合は2つの角かっこが必要です。これは38バイトになります。

ソフトウェアのユーザーにUUIDを公開している場合、ユーザーは角かっこ付きまたはなしでUUIDを提供する可能性があることに注意してください。値をどこかに格納する場合は、16バイトのバイナリ表現として格納するのが最適です。他のUUID実装と相互運用している場合は、相互運用性のために基本的なテキスト形式を使用することをお勧めします。これは、実装が異なれば、バイナリUUID値を格納するときにバイトの順序が異なるためです。


6

長さはエンコーディングによって異なります。このスニペットを使用して、標準のエンコーディングと長さを取得できます。

public void Main() 
{
    var guid = Guid.Empty;
    Write(guid, "N"); // 32 characters
    Write(guid, "D"); // 36 characters (default)
    Write(guid, "B"); // 38 characters
    Write(guid, "P"); // 38 characters
    Write(guid, "X"); // 68 characters
}    

private void Write(Guid guid, string format) 
{
    var guidString = guid.ToString(format);
    Console.WriteLine("{0}: {1} ({2} characters)", format, guidString, guidString.Length);
}

詳細については、Guid.ToStringメソッドを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.