2016-08-21 3 views
2

Как я могу изменить и отменить каждый бит в NSData, используя быстрый язык? Я хочу сделать что-то вроде подрыва кода.Как я могу изменить и отменить каждый бит в NSData, используя быстрый язык?

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

then .. пожалуйста, сообщите мне, как изменить данные в NSData? дайте мне некоторый намек на кодирование. спасибо

+0

Если ваш ввод «привет, мир», каков ваш ожидаемый результат? –

+0

Я хочу изучить каждый байт в nsdata и изменить двоичный код в байте, а затем записать обратно в nsdata для следующей операции. – baileymiller2017

+0

Я ищу точный выход. Можно было бы перевести пару слов несколькими способами. Реверс «A» (0b01000001) 0b10000010, или это 0b10111110? –

ответ

1

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` 

 Смежные вопросы

  • Нет связанных вопросов^_^