0

我想将 UUID(NSUUID,唯一字符串,128 位)转换为数字并将其存储在 SQLite 中(因为主键使用 Core Data)。

我该怎么做?

4

3 回答 3

4

互联网上似乎没有多少可以做你正在寻找的事情,所以我猜你想做的事情可能不是最聪明的事情。

我真正能找到的是:

如何存储 128 位值

[sqlite] 128 位数字

其他一切似乎都在谈论文字而不是数字


根据 Drew 的评论,第二个链接现已失效。但是我在回程机器中找到了它:

Wayback 机器版本:[sqlite] 128 位数字

该讨论的关键部分是:

2005 年 5 月 3 日星期二 17:52 -0400,克里斯托弗·佩特里利写道:

我想知道是否曾经考虑过 128 位数字的可用性?我问的原因是我有一个应用程序需要存储 128 位的 IPv6 地址。现在,我将它们存储在 2 个 64 位字段中,但这显然使查询变得相当复杂。

将字段声明为 CLOB 或 TEXT 并以这种方式存储数字。您可以在 TEXT 列中存储所需的任何尺寸数字。如果它们大于 64 位,你就不能对它们进行算术运算。您需要对 IPv6 地址进行算术运算吗?

SQLite 允许您对 BLOB 进行范围比较。它使用 memcmp() 进行比较。因此,只要您以可以使用 memcmp() 正确比较的格式插入数据,就可以了。

于 2013-09-06T22:10:12.700 回答
0

Core Data 没有主键的概念,也不一定使用 SQLite 作为后备存储,所以这是不可能的。

如果要将 UUID 字符串转换为二进制,请使用

uuid_t uuid;
NSUUID *uuidString = [[[NSUUID alloc] initWithUUIDString:@"68753A44-4D6F-1226-9C60-0050E4C00067"] autorelease];
[uuidString getUUIDBytes:uuid];
于 2013-09-06T21:45:19.567 回答
0

数据类型 binary(128) 将允许 128 位值。

于 2020-07-05T13:47:17.607 回答