0
有幾個項目列表。列表的數量< 8.任何列表中的項目數量< 16.用戶可以在每個列表中選擇一個項目。所以我們有一個整數序列。例如:9,0,12,4.如何通過位移在一個整數中保存多個小整數Objective C
有什麼簡單的方法可以將用戶選擇存儲在一個Integer(32或64)中並從那裏讀取?
可能你知道存儲4位整數序列的更優化方法嗎?
謝謝!
有幾個項目列表。列表的數量< 8.任何列表中的項目數量< 16.用戶可以在每個列表中選擇一個項目。所以我們有一個整數序列。例如:9,0,12,4.如何通過位移在一個整數中保存多個小整數Objective C
有什麼簡單的方法可以將用戶選擇存儲在一個Integer(32或64)中並從那裏讀取?
可能你知道存儲4位整數序列的更優化方法嗎?
謝謝!
+ (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;
}
歡迎來到SO。請定義「最佳」。你的意思是記憶還是表現?將數字存儲在一個整數中會更有效率,但速度更慢。將每個數字存儲在一個類型中,其大小等於機器上一個字的大小會更快,但效率更低。 – FreeNickname
您可以在結構中使用C的位域。 –
另外,如果列表中可以包含可變數量的項目,則還需要存儲一些項目。由於每個項目需要4位,並且項目的最大數量是16,16 * 4 = 64,因此沒有空間留下多個項目。你需要單獨存儲它。 – FreeNickname