如何使用swift语言修改和反转NSData中的每一位?
如何使用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
//.....
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编码有关。