guidを整数の集合として表現したいのであれば、どのように変換するのですか?私はguidのバイト配列表現を取得し、元のGUIDに戻すことができる可能な限り最小の32ビット整数に分割するという考え方に基づいて考えています。コード例が好ましい...Guidを整数の集合として表現する
また、結果の整数配列の長さはどのくらいですか?
guidを整数の集合として表現したいのであれば、どのように変換するのですか?私はguidのバイト配列表現を取得し、元のGUIDに戻すことができる可能な限り最小の32ビット整数に分割するという考え方に基づいて考えています。コード例が好ましい...Guidを整数の集合として表現する
また、結果の整数配列の長さはどのくらいですか?
どういうわけか私はこのようにしてもっと楽しくやりました。
byte[] bytes = guid.ToByteArray();
int[] ints = new int[bytes.Length/sizeof(int)];
for (int i = 0; i < bytes.Length; i++) {
ints[i/sizeof(int)] = ints[i/sizeof(int)] | (bytes[i] << 8 * ((sizeof(int) - 1) - (i % sizeof(int))));
}
バック変換:
byte[] bytesAgain = new byte[ints.Length * sizeof(int)];
for (int i = 0; i < bytes.Length; i++) {
bytesAgain[i] = (byte)((ints[i/sizeof(int)] & (byte.MaxValue << 8 * ((sizeof(int) - 1) - (i % sizeof(int))))) >> 8 * ((sizeof(int) - 1) - (i % sizeof(int))));
}
Guid guid2 = new Guid(bytesAgain);
経由で16のバイトを得ることができるので、
を編集しますか?
コンストラクタ:
public Guid(
byte[] b
)
そして、このインスタンスの値が含まれている16-要素バイト配列を返し
public byte[] ToByteArray()
。
バイトを整数にパッキングし、その逆も簡単です。
System.Guid guid = System.Guid.NewGuid();
byte[] guidArray = guid.ToByteArray();
// condition
System.Diagnostics.Debug.Assert(guidArray.Length % sizeof(int) == 0);
int[] intArray = new int[guidArray.Length/sizeof(int)];
System.Buffer.BlockCopy(guidArray, 0, intArray, 0, guidArray.Length);
byte[] guidOutArray = new byte[guidArray.Length];
System.Buffer.BlockCopy(intArray, 0, guidOutArray, 0, guidOutArray.Length);
System.Guid guidOut = new System.Guid(guidOutArray);
// check
System.Diagnostics.Debug.Assert(guidOut == guid);
GUIDがちょうど16バイトであるとして、あなたは4つの整数に変換することができます:ちょうどバイト配列として整数を取得し、一緒に入れているバック変換
Guid id = Guid.NewGuid();
byte[] bytes = id.ToByteArray();
int[] ints = new int[4];
for (int i = 0; i < 4; i++) {
ints[i] = BitConverter.ToInt32(bytes, i * 4);
}
:
byte[] bytes = new byte[16];
for (int i = 0; i < 4; i++) {
Array.Copy(BitConverter.GetBytes(ints[i]), 0, bytes, i * 4, 4);
}
Guid id = new Guid(bytes);
+1これまでのところ、私はこれが一番好きです。依存関係はありません。 – grenade
それを答えとしてマークすることができます。 :D – Botz3000