ASCIIエンコーディングを使用すると、GUIDには何文字ありますか?
中括弧とダッシュを含むMicrosoftスタイルに興味があります。
ASCIIエンコーディングを使用すると、GUIDには何文字ありますか?
中括弧とダッシュを含むMicrosoftスタイルに興味があります。
回答:
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を参照して ください。
AdamがMSDNの引用から述べたように、UUIDは128ビット値です。これは、値を保持するために16バイトのRAMを必要とすることを意味します。テキスト表現には、32バイト(1バイトごとに2バイト)、4つのハイフン、およびそれらを含める場合は2つの角かっこが必要です。これは38バイトになります。
ソフトウェアのユーザーにUUIDを公開している場合、ユーザーは角かっこ付きまたはなしでUUIDを提供する可能性があることに注意してください。値をどこかに格納する場合は、16バイトのバイナリ表現として格納するのが最適です。他のUUID実装と相互運用している場合は、相互運用性のために基本的なテキスト形式を使用することをお勧めします。これは、実装が異なれば、バイナリUUID値を格納するときにバイトの順序が異なるためです。
長さはエンコーディングによって異なります。このスニペットを使用して、標準のエンコーディングと長さを取得できます。
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メソッドを参照してください。