cocoa – 有没有办法在核心数据中存储unsigned long?

CoreData提供Integer 16,Integer 32和Integer 64存储,但不支持任何符号限定符.您可以将unsigned int(32位)存储为有符号长整数(64位),并确保该值保留为整个范围,但无符号长整数似乎需要128位有符号整数来存储,这当然不是’由CoreData支持.有没有办法在coreData中存储unsigned long?
最佳答案
[以前的评论被提升为回答]

听起来这是对您很重要的位模式,而不是整数值本身.您可以将其存储为已签名 – 只需将其转换为C签名< - >无符号强制转换不强制数学正确性并仅保留位.把它扔回去使用它.

跟进问题:

通常在(Obj-)C()中是,您可以将无符号整数值存储到具有等效有符号整数类型的变量中,反之亦然.来自签名的C演员 – >使用2的补码整数时,无符号定义等同于位复制,两种类型的大小相同.走另一条路,未签名 – >签名,是“实现定义” – 实际上通常意味着一个位拷贝.铿锵GCC使用两者的位副本,但如果你想绝对确定你可以使用一个联合:

unsigned long r;
long l;

r = (unsigned long)l; // will always work (cast optional)

// following is l = (long)r (cast optional) without "implementation defined" risk
{ union { long sValue; unsigned long uValue; } tmp; tmp.uValue = r; l = tmp.sValue;}

但严重的是我怀疑有人会这样! (注意:Clang至少会将其编译为直接赋值(bit-copy).)

转载注明原文:cocoa – 有没有办法在核心数据中存储unsigned long? - 代码日志