C# C更改GUID的第一个32位Int

C# C更改GUID的第一个32位Int,c#,guid,C#,Guid,我有一个用GUID.NewGUID创建的GUID。现在我想用一个特定的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); 可以使用ToB

我有一个用GUID.NewGUID创建的GUID。现在我想用一个特定的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);
可以使用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结构有一个构造函数,该构造函数接受字节数组并可以返回其当前字节,因此实际上非常简单:

//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返回的字节顺序取决于处理器体系结构BitConverter.IsLittleEndian,如果每次使用相同的数字,则Guid的熵会减少232,这取决于您的应用程序可能没有听起来那么糟糕,由于您首先要使用2128。

由于Guid结构有一个构造函数,该构造函数接受字节数组并可以返回其当前字节,因此实际上非常简单:

//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返回的字节顺序取决于处理器体系结构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的第一个字符,可以通过将其转换为字符串、替换字符串中的字符并转换回来来完成。请注意,替换的字符应为十六进制,即数字0-9或字母a-f

var uniqueGuid = Guid.NewGuid();
var uniqueGuidStr = "1234" + uniqueGuid.ToString().Substring(4);
var modifiedUniqueGuid = Guid.Parse(uniqueGuidStr);