+ (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;
}
안녕하세요. 제발, "최적"을 정의하십시오. 메모리 또는 성능을 의미합니까? 하나의 정수에 숫자를 저장하면 메모리가 더 효율적이지만 속도는 느려집니다. 각 숫자를 유형에 저장하면 크기는 컴퓨터에서 한 단어의 크기와 같지만 빠르지 만 효율성은 떨어집니다. – FreeNickname
C의 비트 필드를 구조체에 사용할 수 있습니다. –
또한 목록에 다양한 항목이있을 수 있다면 많은 항목을 저장해야합니다. 각 항목은 4 비트를 차지하고 최대 항목 수는 16이므로 16 * 4 = 64이므로 많은 항목을 저장할 공간이 없습니다. 별도로 저장해야합니다. – FreeNickname