web-dev-qa-db-ja.com

なぜGuid.ToByteArray()はバイトをそれと同じように順序付けするのですか?

.NETでGUID=に対してToByteArray()を呼び出すと、結果の配列内のバイトの順序は、 GUID。たとえば、次の場合GUIDは文字列として表されます:

_11223344-5566-7788-9900-aabbccddeeff
_

ToByteArray()の結果は次のとおりです。

_44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
_

最初の4バイトの順序が逆になっていることに注意してください。また、バイト4と5がスワップされ、バイト6と7がスワップされます。ただし、最後の8バイトは、文字列と同じ順序で表されます。

これが発生していることを理解しています。私が知りたいのは、.NETがこのように処理する理由です。

参考までに、これについての議論と混乱(Oracleデータベースに起因する誤った属性) here および here を参照してください。

47
Cory McCarty

GUIDコンストラクター)の例のセクション を読むと、答えが見つかります。

Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7})は、"00000001-0002-0003-0001-020304050607"に対応するGuidを作成します。

aは32ビット整数、bは16ビット整数、cは16ビット整数、dは単に8バイトです。

ab、およびcは、生のバイトではなく整数型であるため、表示方法を選択するときに、エンディアンの順序に従います。 GUIDのRFC(RFC4122) は、ビッグエンディアン形式で表示する必要があることを示しています。

30
user7116