C++ 如何将ASN1_时间转换为std::string

C++ 如何将ASN1_时间转换为std::string,c++,openssl,C++,Openssl,我正在以这种方式将ASN1_时间转换为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->len

我正在以这种方式将ASN1_时间转换为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->length中得到了非常大的数字,这导致了std::string构造中的异常。

所讨论的代码很好。该问题是由不匹配的标题造成的。 由于使用了系统中早期的头文件,所以一切都很好。由于(很可能)El Capitan,OSX不再包含头文件,不鼓励依赖OSX进行SSL,以避免由于版本不兼容而导致的问题


这正是发生的事情——代码被链接到操作系统上的库中,但使用的标题来自不同的版本,因为它们是从openssl最新源代码下载的。

有问题的代码很好。该问题是由不匹配的标题造成的。 由于使用了系统中早期的头文件,所以一切都很好。由于(很可能)El Capitan,OSX不再包含头文件,不鼓励依赖OSX进行SSL,以避免由于版本不兼容而导致的问题


这正是发生的事情-代码被链接到操作系统上的库,但使用的标题来自不同的版本,因为它们是从openssl最新源代码下载的。

也许这会有所帮助:您可以展示如何填充asn1Time
bptr->data
是否有效,或者是否为
NULL
?发现问题-不匹配的标题导致此问题。该项目使用了1.0.1版本的标题,但OSX 10.11上的库是0.9.8。(BUF_MEM struct的成员已从int更改为size_t。)也许这会有所帮助:您可以演示如何填充
asn1Time
bptr->data
是否有效,或者是否为
NULL
?发现问题-不匹配的标题导致此问题。该项目使用了1.0.1版本的标题,但OSX 10.11上的库是0.9.8。(BUF_MEM结构的成员已从int更改为size_t。)