C# 更改 GUID 的前 32 位 Int
C# change the first 32bit Int of a GUID
我有一个 GUID
是我用 GUID.NewGUID()
创建的。现在我想用特定的 32 位整数替换它的前 32 位,同时保持其余部分不变。
有执行此操作的功能吗?
您可以使用 ToByteArray()
函数,然后使用 Guid 构造函数。
byte[] buffer = Guid.NewGuid().ToByteArray();
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0;
buffer[3] = 0;
Guid guid = new Guid(buffer);
因为 Guid
结构有一个构造函数,它接受一个字节数组并且可以 return 它的当前字节,它实际上很容易:
//Create a random, new guid
Guid guid = Guid.NewGuid();
Console.WriteLine(guid);
//The original bytes
byte[] guidBytes = guid.ToByteArray();
//Your custom bytes
byte[] first4Bytes = BitConverter.GetBytes((UInt32) 0815);
//Overwrite the first 4 Bytes
Array.Copy(first4Bytes, guidBytes, 4);
//Create new guid based on current values
Guid guid2 = new Guid(guidBytes);
Console.WriteLine(guid2);
但是请记住,从 BitConverter
编辑的字节顺序 return 取决于您的处理器架构 (BitConverter.IsLittleEndian
) 并且您的 Guid 的熵减少 232 如果你每次都使用相同的数字(这取决于你的应用程序可能并不像听起来那么糟糕,因为你有 2128 ).
问题是替换位,但是如果有人想直接替换guid的第一个字符,这可以通过将其转换为字符串,替换字符串中的字符并转换回来来完成。请注意,替换字符应以十六进制形式有效,即数字 0 - 9 或字母 a - f.
var uniqueGuid = Guid.NewGuid();
var uniqueGuidStr = "1234" + uniqueGuid.ToString().Substring(4);
var modifiedUniqueGuid = Guid.Parse(uniqueGuidStr);
我有一个 GUID
是我用 GUID.NewGUID()
创建的。现在我想用特定的 32 位整数替换它的前 32 位,同时保持其余部分不变。
有执行此操作的功能吗?
您可以使用 ToByteArray()
函数,然后使用 Guid 构造函数。
byte[] buffer = Guid.NewGuid().ToByteArray();
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0;
buffer[3] = 0;
Guid guid = new Guid(buffer);
因为 Guid
结构有一个构造函数,它接受一个字节数组并且可以 return 它的当前字节,它实际上很容易:
//Create a random, new guid
Guid guid = Guid.NewGuid();
Console.WriteLine(guid);
//The original bytes
byte[] guidBytes = guid.ToByteArray();
//Your custom bytes
byte[] first4Bytes = BitConverter.GetBytes((UInt32) 0815);
//Overwrite the first 4 Bytes
Array.Copy(first4Bytes, guidBytes, 4);
//Create new guid based on current values
Guid guid2 = new Guid(guidBytes);
Console.WriteLine(guid2);
但是请记住,从 BitConverter
编辑的字节顺序 return 取决于您的处理器架构 (BitConverter.IsLittleEndian
) 并且您的 Guid 的熵减少 232 如果你每次都使用相同的数字(这取决于你的应用程序可能并不像听起来那么糟糕,因为你有 2128 ).
问题是替换位,但是如果有人想直接替换guid的第一个字符,这可以通过将其转换为字符串,替换字符串中的字符并转换回来来完成。请注意,替换字符应以十六进制形式有效,即数字 0 - 9 或字母 a - f.
var uniqueGuid = Guid.NewGuid();
var uniqueGuidStr = "1234" + uniqueGuid.ToString().Substring(4);
var modifiedUniqueGuid = Guid.Parse(uniqueGuidStr);