2011-09-21 399 views
4

我在这里遇到了一些问题..我正在使用以下代码在我的应用程序中生成uuid。如何将UUID存储为int

- (NSString *)GetUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return [(NSString *)string autorelease]; 
} 

此代码返回一个NSString对象返回。现在我想将生成的UUID存储为unsigned int。任何建议,请如何在这里做到这一点。谢谢。

+1

您不能将'UUID'存储为'unsigned int'。前者是128位宽,后者在iPhone上只有32位宽。它只是不适合。如果您更多地分享您为什么要这样做,我们可能会提供帮助。 –

+1

我想以数字形式存储uuid。像一个整数而不是字符串。因为花费太多时间以字符串形式进行搜索和比较。是否有可能.. – Hadi

+0

不,这是不可能的。而一个GUID已经是数字 - 只是不要将其转换为字符串。 –

回答

7

根据Wikipedia page,UUID长度为128位。您可以使用的最大的int值是64位。因此,我会说你不能将它存储在int中,因为没有空间。

+0

字符串在搜索和比较我的服务器时花费了太多时间。是否有可能适应任何其他类型.. – Hadi

+0

我相信它是。你可以创建一个包含UUID部分的结构,然后编写比较函数来处理它们。不过,这取决于你正在尝试做什么。您的文章标记为iPhone,但您正在讨论服务器。你如何比较它们? – LandonSchropp

+0

我正在使用NSString在iPhone上生成UUID并将它们保存在数据库中,然后将它们上传到服务器。如果我必须获取该数据,我会从手机发送相关的UUID。这是需要时间,所以我选择了整数,但我仍然认为我会用NSString .. – Hadi

0

转换UUID到String的使用.UUIDString

采取串的.hash财产。

强制转换为int。

int numericFormUUID = (int)UUIDString.hash;


注:冲突是可能的,一如既往地与散列。两个用户可能会在这里得到相同的值,而UUID是唯一的。