这是你运行从一定的复杂性,因为必须与C一起工作。
这里主要关心的是你传递给函数的指针的生命期。下面的代码使用指向Swift字符串缓冲区的指针。如果areKeysConsistent
捕获这些指针供以后使用,则会成为问题。 ARC可能会取消分配Swift字符串,使这些存储的指针变成悬挂指针。
func areKeysConsistent(
_ cert: UnsafeMutablePointer<UInt8>, _ certLength: Int,
_ key: UnsafeMutablePointer<UInt8>, _ keyLength: Int,
_ pass: UnsafeMutablePointer<UInt8>, _ passLength: Int
) {
print(cert, key, pass)
}
let certificate = "cert"
let privateKey = "key"
let password = "password"
var certificateCString = certificate.utf8CString
var privateKeyCString = privateKey.utf8CString
var passwordCString = password.utf8CString
certificateCString.withUnsafeMutableBytes { certUMRBP in
privateKeyCString.withUnsafeMutableBytes { pkUMRBP in
passwordCString.withUnsafeMutableBytes { passUMRBP in
areKeysConsistent(
certUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: certUMRBP.count),
certUMRBP.count,
pkUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: pkUMRBP.count),
pkUMRBP.count,
passUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: passUMRBP.count),
passUMRBP.count
)
}
}
}
的问题是,一个字符串是INT8(CCHAR),_not_ UIInt8的数组。这里有一个类型不匹配。它是由UInt8构成的_data_(Data,NSData)。 – matt
“areKeysConsistent”函数来自哪里?它受你控制吗?奇怪的是,它预计'UInt8'不'CChar'('Int8') – Alexander
可能重复的[Swift convert string to UnsafeMutablePointer](http://stackoverflow.com/questions/30042494/swift-convert-string-to- unsafemutablepointerint8) –
JAL