Objective c 如何通过目标C中的位移位在一个整数中保存多个小整数
有几个项目列表。列表的数量<8。任何列表中的项目数<16。用户可以在每个列表中选择一项。所以我们有一个整数序列。例如:9,0,12,4 有没有简单的方法将用户选择存储在一个整数(32或64)中并从中读取 您知道存储4位整数序列的最佳方法吗 谢谢Objective c 如何通过目标C中的位移位在一个整数中保存多个小整数,objective-c,bit-shift,application-settings,datastore,Objective C,Bit Shift,Application Settings,Datastore,有几个项目列表。列表的数量
+(NSArray*)数组fromngint:(uint32_t)longint{
+ (NSArray *)arrayFromLongint:(uint32_t)longint {
uint8_t shortint;
NSMutableArray *array = [[NSMutableArray alloc] init];
for (uint8_t i = 0; i < 32; i = i + 4) {
shortint = longint >> i & 15; // 15 is 00001111 in binary
[array addObject:[NSNumber numberWithUnsignedShort:shortint]];
}
return array;
}
+ (uint32_t)longintFromArray:(NSArray *)array {
uint8_t shortint, itemIndex = 0;
uint32_t longint = 0;
NSNumber *item;
for (uint8_t i = 0; i < 32; i = i + 4) {
if ([[array objectAtIndex:itemIndex] isKindOfClass:[NSNumber class]]) {
item = [array objectAtIndex:itemIndex];
shortint = [item unsignedShortValue] & 15; // 15 is 00001111 in binary
longint = longint | shortint << i;
}
itemIndex++;
}
return longint;
}
uint8_t shortint;
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
对于(uint8_t i=0;i<32;i=i+4){
shortint=longint>>i&15;//15是二进制的00001111
[array addObject:[NSNumber numberWithUnsignedShort:shortint]];
}
返回数组;
}
+(uint32_t)纵向阵列:(NSArray*)阵列{
uint8\u t shortint,itemIndex=0;
uint32_t longint=0;
编号*项;
对于(uint8_t i=0;i<32;i=i+4){
如果([[array objectAtIndex:itemIndex]是KindofClass:[NSNumber class]]){
item=[array objectAtIndex:itemIndex];
shortint=[item unsignedShortValue]&15;//15是二进制的00001111
longint=longint | shortint欢迎使用SO。请定义“最佳”。您是指内存还是性能?将数字存储在一个整数中会更节省内存,但速度较慢。将每个数字存储在一个类型中,该类型的大小等于计算机上一个字的大小,速度更快,但效率更低。您可以在结构中使用C的位字段。此外,如果列表中的项目数可变,则需要存储一个num项目的ber。由于每个项目占用4位,最大项目数为16,16*4=64,因此没有足够的空间容纳多个项目。您需要单独存储它。您确定此优化值得吗?我只需要存储每个列表项目的索引。此值将存储在数据库(CoreData)中因此,使用一个属性而不是2甚至8似乎更有效(内存空间)。