如何使用swift语言修改和反转NSData中的每一位?

如何使用swift语言修改和反转NSData中的每一位?,swift,nsdata,Swift,Nsdata,如何使用swift语言修改和反转NSData中的每一位?我想做一些类似代码混淆的东西 //..... let tempstring : String = "hello world!" let tempnsstring : NSString = tempstring as NSString var tempnsdata : NSData! tempnsdata = tempnsstring.dataUsingEncoding(encoding) //.... 然后。。请告诉我如何修改N

如何使用swift语言修改和反转NSData中的每一位?我想做一些类似代码混淆的东西

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

然后。。请告诉我如何修改NSData中的数据?给我一些关于编码的提示。谢谢

NSData
是一个不可变的类型,因此您不能修改它的内容

两种选择

(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`
let tempstring=“你好,世界!”
let encoding=NSUTF8StringEncoding
让tempnsdata=tempstring.dataUsingEncoding(编码)!
将tempnsmutabledata=tempnsdata.mutableCopy()设为!可变数据
让mutabledataptr=UnsafeMutablePointer(tempnsmutabledata.mutableBytes)

对于0中的i..如果您的输入是“hello,world”,那么您期望的输出是什么?我想探索nsdata中的每个字节,并反转字节中的二进制代码,然后写回nsdata以进行下一个操作。我正在寻找确切的输出。人们可以从两个方面来理解这个词。是“A”(0b01000001)0b10000010的反方向,还是0B1011110的反方向?在任何情况下,一般的答案都是使用getbytes将数据从NSData中提取到一个数组中,按需要遍历该数组,然后将结果存储到新的NSData中。只需将其像0b01000001这样的位代码反方向写入0b111110,感谢这仅适用于iOS/iPadOS?对于Mac,它将无法工作,例如:“Data”类型的值没有成员“mutableCopy”@Heitor,这是一个用Swift 3(或2)age编写的旧线程。您最好启动一个新线程,显示您使用的Swift版本。它是5.1版。XCode给出了一些建议并提出了一些修改,但它似乎与Mac的Im编码有关。