あなたが実行する場所です。 Cで作業する必要があり、ある程度の複雑さがあります。
ここでの主な関心事は、その関数に渡すポインタの寿命です。以下のコードでは、Swift Stringsのバッファへのポインタを使用しています。後で使用するためにareKeysConsistent
がそれらのポインタをキャプチャする場合は問題になります。 ARCがSwift Stringを割り当て解除し、格納されているポインタがぶら下がりポインタになる可能性があります。
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をUnsafeMutablePointerに変換する可能性のある複写]の可能な複製(http://stackoverflow.com/questions/30042494/swift-convert-string-to- unsafemutablepointerint8) –
JAL