我必须将int BN_hex2bn(BIGNUM **a, const char *str);
用作Swift类;我实际上已经准备了以下代码:
class Test {
var N : UnsafeMutablePointer<BIGNUM>
var N_hex: String = "...HEX VALUE...";
init() {
self.N = BN_new()
}
use() {
var Nhandle: UnsafeMutablePointer<UnsafeMutablePointer<BIGNUM>?>? = [???]
BN_hex2bn(Nhandle, self.N_hex);
}
}
好吧,正如您所了解的,我在初始化句柄时遇到了一些问题! :-)
更好:这是在Swift中使用此类功能的正确方法吗?有其他方法吗?如何初始化句柄?
谢谢您的回答!
答案 0 :(得分:0)
BN_hex2bn()
期望BIGNUM *
的地址作为第一个参数,在Swift中,它是UnsafeMutablePointer<BIGNUM>?
变量的地址。您“仅”必须声明该变量(使用nil
自动初始化可选变量)并将其作为带有&
的inout参数传递给该函数。示例:
let hexString = "123456789abcdef"
var bn: UnsafeMutablePointer<BIGNUM>?
BN_hex2bn(&bn, hexString)
// Do something with `bn` ...
// Eventually free the memory:
BN_free(bn)
如果将其包装在Swift类中,则可以通过deinit
方法释放资源:
class BN {
var bn: UnsafeMutablePointer<BIGNUM>?
init(hexString: String) {
BN_hex2bn(&bn, hexString)
}
deinit {
if let bn = bn { BN_free(bn) }
}
}