我有一個簡單的 Objective-C 函式:
- (NSData *)xorData1:(NSData *)data1 data2:(NSData *)data2 resultLength:(NSInteger)length {
const char *data1Bytes = [data1 bytes]; // ??
const char *data2Bytes = [data2 bytes]; // ??
NSMutableData *xorData = [[NSMutableData alloc] init];
for (int i = 0; i < length; i ) {
const char xorByte = data1Bytes[i % data1.length] ^data2Bytes[i % data2.length];
[xorData appendBytes:&xorByte length:1];
}
return xorData;
}
我需要讓它在 Swift 中作業。我怎樣才能做到這一點?
import CommonCrypto
func xor(firstData: Data, secondData: Data) -> Data {
let length = kCCKeySizeAES128
let firstDataBytes = firstData // ??
let secondDataBytes = secondData // ??
let xorData = NSMutableData()
for i in 0..<length {
var xorByte = firstDataBytes[i % firstData.count] ^ secondDataBytes[i % secondData.count];
xorData.append(&xorByte, length: 1)
}
return xorData as Data
}
uj5u.com熱心網友回復:
您的 Swift 函式可以編譯,并且應該產生與 Objective-C 函式相同的結果。不需要bytes
屬性,因為Data
is aCollection
并且底層位元組可以通過下標訪問:
let d = Data([11, 22, 33, 44, 54])
print(d[2]) // 33
也不需要使用 Cocoa 類,使用 Swift型別NSMutableData
更簡單:Data
func xor(firstData: Data, secondData: Data) -> Data {
let length = kCCKeySizeAES128
var xorData = Data()
for i in 0..<length {
let xorByte = firstData[i % firstData.count] ^ secondData[i % secondData.count];
xorData.append(xorByte)
}
return xorData
}
或者,使用以下map
功能:
func xor(firstData: Data, secondData: Data) -> Data {
let length = kCCKeySizeAES128
return Data((0 ..< length).map {
firstData[$0 % firstData.count] ^ secondData[$0 % secondData.count]
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/533284.html
標籤:迅速目标-c