ランダムなASCIIバイトを保持するNSMutableDataがあります。それらのバイトの値を値(X)だけシフトしたいと思います。
だから私はこのようなものを持っているとしましょう:
02 00 02 4e 00
ここで、すべての1バイトを0x01ずつ増やして、次のようにします。
03 01 03 4f 01
このための最良のアプローチは何ですか?
ランダムなASCIIバイトを保持するNSMutableDataがあります。それらのバイトの値を値(X)だけシフトしたいと思います。
だから私はこのようなものを持っているとしましょう:
02 00 02 4e 00
ここで、すべての1バイトを0x01ずつ増やして、次のようにします。
03 01 03 4f 01
このための最良のアプローチは何ですか?
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);
詳細については、バイナリデータプログラミングガイドの記事「可変バイナリデータの操作」を参照してください。
また、あなたがしているのは「シフト」ではなく、単に0x01を追加することです。「シフト」は通常、「ビットシフト」を指します。
このようなもの:
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>