我正在尝试将字符串转换为 SHA256 哈希值,但出现下一个错误:
Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'
这就是我的功能:
func SHA256(data: String) -> Data {
var hash = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))!
if let newData: Data = data.data(using: .utf8) {
let bytes = newData.withUnsafeBytes {(bytes: UnsafePointer<CChar>) -> Void in
CC_SHA256(bytes, CC_LONG(newData.length), UnsafeMutablePointer<UInt8>(hash.mutableBytes))
}
}
return hash as Data
}
所以,对于这一部分
UnsafeMutablePointer<UInt8>(hash.mutableBytes)
我收到此错误:
Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'
我该如何解决这个问题以及我做错了什么?
你最好用Data
也为了结果hash
.
在斯威夫特 3 中,withUnsafePointer(_:)
and withUnsafeMutablePointer(:_)
是泛型类型,当与“格式良好”的闭包一起使用时,Swift 可以正确推断 Pointee 类型,这意味着您无需手动转换 Pointee 类型。
func withUnsafeBytes((UnsafePointer) -> ResultType) https://developer.apple.com/reference/foundation/data/1780450-withunsafebytes
func withUnsafeMutableBytes((UnsafeMutablePointer) -> ResultType) https://developer.apple.com/reference/foundation/data/1779823-withunsafemutablebytes
func SHA256(data: String) -> Data {
var hash = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
if let newData: Data = data.data(using: .utf8) {
_ = hash.withUnsafeMutableBytes {mutableBytes in
newData.withUnsafeBytes {bytes in
CC_SHA256(bytes, CC_LONG(newData.count), mutableBytes)
}
}
}
return hash
}
在 Swift 3 中,初始化器UnsafePointer
and UnsafeMutablePointer
在 Swift 2 之前用于转换 Pointee 类型的 已被删除。但在许多情况下,您无需进行指针类型转换即可工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)