【问题标题】:Why static_cast can't cast ulong to uchar*为什么 static_cast 不能将 ulong 转换为 uchar*
【发布时间】:2022-12-13 08:08:48
【问题描述】:
BCRYPT_ALG_HANDLE hAlg = nullptr; 
DWORD HashObjectSize = 0; 
ULONG CopyByte = NULL; 

status = BCryptGetProperty
        (
            hAlg,
            BCRYPT_OBJECT_LENGTH,
            (PUCHAR)&HashObjectSize, //unsigned long =?= unsigned char*
            sizeof(PUCHAR),
            &CopyByte,
            NULL
        );

这段代码没有错误,但是如果我将 c 样式转换为 static_cast 我得到错误

Invalid conversion

DWORD 是无符号长整数

PUCHAR 是一个无符号字符*

为什么我可以用 c 风格的转换来转换这个变量,但不能用 static_cast(PUCHAR)&HashObjectSize

【问题讨论】:

    标签: c++ winapi bcrypt


    【解决方案1】:

    static_cast 不能从整数转换为指针,反之亦然。或者在两个不相关的类型之间。

    您需要改用reinterpret_cast,例如:

    reinterpret_cast<PUCHAR>(&HashObjectSize)

    C-style cast 检查几种不同类型的转换,直到可以使用其中一种。如果不能使用static_cast,它将检查reinterpret_cast

    【讨论】:

    • 请注意,转换是在两种不同的指针类型之间进行的,但答案仍然相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多