将GUID转换为整数并反向转换

5

我有一个第三方应用程序需要与之交互,该应用程序需要从我的用户表中获取userID。问题在于,我将我的userIDs存储为GUID,而第三方应用程序只接受整数。因此,我想,如果有一种方法可以将GUID转换为整数,然后能够将其转换回来(因为我会从他们的服务器收到关于userID的通信),那么我就不必重新编码太多了。有什么想法吗?

6个回答

9

一个整数使用32位,而GUID使用128位 - 因此,没有办法将GUID转换为整数而不丢失信息,因此您无法将其转换回来。

编辑:您可以将GUID存储到GUID表中,为每个GUID分配唯一的整数ID。这样,您可以通过整数ID获取GUID。


2
整数的大小取决于系统。 - Filip Ekberg
但是这样,你就限制了自己只能使用2^32个ID。 - LeppyR64

8

您需要存储一个从您的Guid到第三方整数的映射关系:可以是现有用户表中的新字段"int thirdPartyId",也可以是一个新表。


我真的希望不必修改数据访问层,但事实证明我的直觉是正确的。 - Russ Bradberry

6
你需要一个128位整数类型来保存GUID的等效值。你可以使用Guid的ToByteArray()方法获取字节,使用接受字节数组的构造函数恢复GUID。
你也可以使用GetHashCode()方法获取整数,但是两个不同的GUID可能具有相同的哈希码,因为可能的GUID比32位整数更多。

2

GUID(全局唯一标识符)比整数大得多,无法放入整数中。


0
添加一个整数标识列,它基本上是一个第二个ID列,并将该列的ID分配给应用程序。

0
创建一个新表(MyUserMappings),包含两列:
1)ThirdPartyUserID(INT,NOT NULL,IDENTITY(1,1))
2)MyUserID(GUID,NOTNULL)
通过以下方式将所有GUID从您的UserID插入到此表中:
INSERT INTO MyUserMappings(MyUserID) SELECT MyGUIDUserID FROM MyUsers
您还需要在MyUsers表上放置触发器,以便每次MyUsers表获得新行时,在MyUsersMappings表中插入新行。
现在创建一个视图,显示来自MyUsers表的所有字段和来自MyUsermappingsTable的ThirdParty UserID字段。
现在,您不需要对现有应用程序进行任何DAL更改,原始表也不受影响。因此,您的现有应用程序将保持不变。您的新代码可以查询视图而不是表格以返回整数ID和所有其他用户信息。
干杯。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接