我正在以这种方式将ASN1_TIME转换为std :: string:
std::string timeString;
BIO *bmem = BIO_new(BIO_s_mem());
if (ASN1_TIME_print(bmem, asn1Time)) {
BUF_MEM * bptr;
BIO_get_mem_ptr(bmem, &bptr);
timeString.assign(std::string(bptr->data, bptr->length));
}
else { // Log error
}
BIO_free_all(bmem);
使用BUF_MEM有什么问题?我在bptr->长度中得到非常大的数字,导致std :: string构造中出现异常。
答案 0 :(得分:0)
有问题的代码很好。问题是由于标题不匹配造成的。 系统的早期标题正在使用,因此一切都很好。由于(最有可能)El-Capitan,OSX不再包含依赖OSX for SSL的标题和劝阻,以避免由于版本不兼容而导致的问题。
请参阅http://lists.apple.com/archives/macnetworkprog/2015/Jun/msg00025.html
这正是发生的事情 - 代码在操作系统上与库链接但是使用的标题来自不同版本,因为它们是从openssl最新源下载的。