C ++如何在再次使用之前将BYTE *转换为_CERT_TEMPLATE_EXT *并检查结果?

时间:2017-02-03 12:34:33

标签: c++ arrays casting

我的代码类似于:

BYTE *byteVar;
_CERT_TEMPLATE_EXT *structVar;
// assign byteVar
structVar = (_CERT_TEMPLATE_EXT*)byteVar;
// Here I would like to check if in the byteVar there is a _CERT_TEMPLATE_EXT * or not; 
// (if the cast was successfull or not.)

我不知道应该使用什么样的演员表。

1 个答案:

答案 0 :(得分:0)

假设您尝试在Windows上执行加密,_CERT_TEMPLATE_EXT与定义here一致,那么您无法可靠地检查。

您可以查看structVar->pszObjId,并检查它是否看起来像是有效的OID。如果没有,那么应用程序的问题就出现了严重问题,您需要对其进行调试。 (如果指针不是一个CERT_TEMPLATE_EXT,则检查将涉及未定义的行为 - 但是使用转换后的值也是如此,因此您不会更糟糕。)

一般情况下,您需要reinterpret_cast在不相关的指针类型之间进行投射,但至少GCC似乎只允许来自static_cast的{​​{1}}(我在这里没有MSVC)随便检查一下。就个人而言,我认为我会坚持一个可怕的unsigned char *