2013-02-03 3 views
2

임의의 ASCII 바이트를 보유한 NSMutableData가 있습니다. 해당 바이트의 값을 값 (X)만큼 이동하고 싶습니다.NSData에서 바이트 값 증가

그래서 우리는이 같은 뭔가가 있다고 가정 해 봅시다 :

02 00 02 4e 00 
지금 얻을 0x01로에 의해 모든 단일 바이트를 높이려는

:

03 01 03 4f 01 

이를위한 가장 좋은 방법은 무엇입니까?

+1

을 반복 처리하고 각 바이트에 하나를 추가 할 수 있습니다. (이것은 속임수입니까?) –

답변

2

mutableBytes을 사용하여 바이트에 대한 포인터를 가져 와서 일반 C 배열처럼 취급하십시오.

uint8_t originalBytes[] = {0x02, 0x00, 0x02, 0x4e, 0x00}; 
NSMutableData * myData = [NSMutableData dataWithBytes:originalBytes length:5]; 

uint8_t * bytePtr = [myData mutableBytes]; 

for(int i = 0; i < [myData length]; i++) { 
    bytePtr[i] += 0x01; 
} 

NSLog(@"%@", myData); 

바이너리 데이터 프로그래밍 가이드 기사, "Working With Mutable Binary Data"에 대한 추가 정보가 있습니다.

또한 무엇을하고있는 것은 "이동"하는 것이 아니라 단순히 0x01을 추가하는 것입니다. "이동"은 일반적으로 "bit shifting"을 나타냅니다. 이 같은

1

뭔가 :

NSString *_chars = @"abcd"; 
NSMutableData *_data = [NSMutableData dataWithBytes:[_chars UTF8String] length:_chars.length]; 

NSLog(@"Bef. : %@", _data);  
for (int i = 0; i < _data.length; i++) ((char *)[_data mutableBytes])[i]++; 
NSLog(@"Aft. : %@", _data);  

로그는 결과를 보여줍니다

Bef. : <61626364> 
Aft. : <62636465>