Objective c 如何通过目标C中的位移位在一个整数中保存多个小整数

Objective c 如何通过目标C中的位移位在一个整数中保存多个小整数,objective-c,bit-shift,application-settings,datastore,Objective C,Bit Shift,Application Settings,Datastore,有几个项目列表。列表的数量

有几个项目列表。列表的数量<8。任何列表中的项目数<16。用户可以在每个列表中选择一项。所以我们有一个整数序列。例如:9,0,12,4

有没有简单的方法将用户选择存储在一个整数(32或64)中并从中读取

您知道存储4位整数序列的最佳方法吗

谢谢

+(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似乎更有效(内存空间)。