2016-08-21 5 views
2

NSDataのすべてのビットを素早く変更して元に戻すにはどうしたらいいですか?私はコードの苦しみのようなものを作りたい。どのようにNSDataのすべてのビットを迅速な言語を使用して変更したり元に戻したりできますか?

//..... 
let tempstring : String = "hello world!" 
let tempnsstring : NSString = tempstring as NSString 
var tempnsdata : NSData! 
tempnsdata = tempnsstring.dataUsingEncoding(encoding) 
//.... 

NSDataのデータを変更する方法を教えてください。私にコーディングのヒントを与えてください。ありがとう

+0

あなたの入力が "hello、world"の場合、期待される出力は何ですか? –

+0

私はnsdataのすべてのバイトを探索し、バイナリコードをバイト単位で反転してから、次の操作のためにnsdataに書き戻します。 – baileymiller2017

+0

正確な出力を探しています。 1つは、逆の言葉をいくつかの方法で取ることができます。 'A'(0b01000001)の逆数は0b10000010ですか、それとも0b10111110ですか? –

答えて

1

NSDataは不変型なので、内容を変更することはできません。

2つの選択肢。

(1)変更された内容の新しいNSDataを作成します。

let tempstring = "hello world!" 
let encoding = NSUTF8StringEncoding 
let tempnsdata = tempstring.dataUsingEncoding(encoding)! 
var tempbytes: [UInt8] = Array(count: tempnsdata.length, repeatedValue: 0) 
tempnsdata.getBytes(&tempbytes, length: tempbytes.count) 
for i in tempbytes.indices { 
    tempbytes[i] = ~tempbytes[i] 
} 
let modifiednsdata = NSData(bytes: tempbytes, length: tempbytes.count) 
//Use `modifiednsdata`... 

(2)変更可能なコピーを作成し、その中の内容を変更します。

let tempstring = "hello world!" 
let encoding = NSUTF8StringEncoding 
let tempnsdata = tempstring.dataUsingEncoding(encoding)! 
let tempnsmutabledata = tempnsdata.mutableCopy() as! NSMutableData 
let mutabledataptr = UnsafeMutablePointer<UInt8>(tempnsmutabledata.mutableBytes) 
for i in 0..<tempnsmutabledata.length { 
    mutabledataptr[i] = ~mutabledataptr[i] 
} 
//Use `tempnsmutabledata` as `NSData` 
関連する問題