如何存储 128 位值?

Posted

技术标签:

【中文标题】如何存储 128 位值?【英文标题】:How to store 128-bit value? 【发布时间】:2013-09-06 21:29:26 【问题描述】:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

互联网上似乎没有多少可以满足您的需求,所以我猜想您想做的事情可能不是最明智的做法。

我真正能找到的是:

How to store 128 bit values

[sqlite] 128-bit numbers

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


根据 Drew 的评论,第二个链接现已失效。然而我在返程机里找到了它:

Wayback machine version of: [sqlite] 128-bit numbers

该讨论的关键部分是:

Christopher Petrilli 于 2005 年 5 月 3 日星期二 17:52 -0400 写道:

我想知道 128 位数字是否可用 考虑过?我问的原因是我有一个应用程序 需要存储128bits的IPv6地址。此刻,我 将它们存储在 2 个 64 位字段中,但这显然会使 查询了不少。

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

SQLite 允许您对 BLOB 进行范围比较。它使用 memcmp() 来 做比较。因此,只要您以某种格式插入数据 可以使用 memcmp() 正确比较,你应该没问题。

【讨论】:

【参考方案2】:

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

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

uuid_t uuid;
NSUUID *uuidString = [[[NSUUID alloc] initWithUUIDString:@"68753A44-4D6F-1226-9C60-0050E4C00067"] autorelease];
[uuidString getUUIDBytes:uuid];

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何存储 128 位值?的主要内容,如果未能解决你的问题,请参考以下文章

如果我的编译器不支持它们,如何在C或C ++中添加和减去128位整数?

Z80汇编:如何将带符号的8位值添加到16位寄存器?

我可以在 webgl2 的单通道中存储签名的 16 位值吗?

将 16 位值的 __m256i 打包(饱和)到 8 位值的 __m128i?

是否可以在 Altivec 中旋转 128 位值?

如何在 MySQL 的单列中存储 128 位数字?