我想将UUID(NSUUID,唯一字符串,128位)转换为数字并将其存储在SQLite中(因为主键使用Core Data)。我该怎么做?
wfsdck301#
似乎没有太多的互联网上做什么你正在寻找,所以我想你想做的可能不是最聪明的事情。我能找到的只有:如何存储128位值[sqlite] 128-bit numbers其他一切似乎都在谈论文本而不是数字根据Drew的评论,第二个链接现在已经死了。但是我在wayback机器中找到了它:Wayback machine version of: [sqlite] 128-bit numbers该讨论的关键部分是:On Tue,2005-05-03 at 17:52 -0400,Christopher Petrilli wrote:我想知道是否曾经考虑过128位数字的可用性?我问这个问题的原因是我有一个需要存储IPv6地址的应用程序,它是128位的。现在,我将它们存储在2个64位字段中,但这显然使查询变得相当复杂。将字段声明为CLOB或TEXT,并以这种方式存储数字。您可以在TEXT列中存储任何大小的数字。如果它们大于64位,则无法对其进行算术运算。您需要对IPv6地址进行算术运算吗?和SQLite允许你在BLOB上进行范围比较。它使用memcmp()来进行比较。所以只要你以一种可以使用memcmp()进行正确比较的格式插入数据,就应该没问题。
sg2wtvxw2#
数据类型binary(128)将允许128位值。
binary(128)
vq8itlhq3#
Core Data没有主键的概念,也不一定使用SQLite作为后备存储,所以这是不可能的。如果要将UUID字符串转换为二进制,请使用
uuid_t uuid; NSUUID *uuidString = [[[NSUUID alloc] initWithUUIDString:@"68753A44-4D6F-1226-9C60-0050E4C00067"] autorelease]; [uuidString getUUIDBytes:uuid];
3条答案
按热度按时间wfsdck301#
似乎没有太多的互联网上做什么你正在寻找,所以我想你想做的可能不是最聪明的事情。
我能找到的只有:
如何存储128位值
[sqlite] 128-bit numbers
其他一切似乎都在谈论文本而不是数字
根据Drew的评论,第二个链接现在已经死了。但是我在wayback机器中找到了它:
Wayback machine version of: [sqlite] 128-bit numbers
该讨论的关键部分是:
On Tue,2005-05-03 at 17:52 -0400,Christopher Petrilli wrote:
我想知道是否曾经考虑过128位数字的可用性?我问这个问题的原因是我有一个需要存储IPv6地址的应用程序,它是128位的。现在,我将它们存储在2个64位字段中,但这显然使查询变得相当复杂。
将字段声明为CLOB或TEXT,并以这种方式存储数字。您可以在TEXT列中存储任何大小的数字。如果它们大于64位,则无法对其进行算术运算。您需要对IPv6地址进行算术运算吗?
和
SQLite允许你在BLOB上进行范围比较。它使用memcmp()来进行比较。所以只要你以一种可以使用memcmp()进行正确比较的格式插入数据,就应该没问题。
sg2wtvxw2#
数据类型
binary(128)
将允许128位值。vq8itlhq3#
Core Data没有主键的概念,也不一定使用SQLite作为后备存储,所以这是不可能的。
如果要将UUID字符串转换为二进制,请使用