+ (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;
}
ようこそ。 "最適"を定義してください。あなたは記憶やパフォーマンスを意味しますか? 1つの整数に数値を格納する方がメモリー効率は向上しますが、速度は遅くなります。マシン上の1ワードのサイズに等しいタイプの各数値を格納する方が高速ですが効率は低くなります。 – FreeNickname
Cのビットフィールドを構造体に使用できます。 –
また、リストにアイテムの数が可変であれば、多数のアイテムも保存する必要があります。各アイテムは4ビットをとり、アイテムの最大数は16であるので、16 * 4 = 64なので、多くのアイテムが残るスペースはありません。あなたはそれを別々に保管する必要があります。 – FreeNickname