从char*缓冲区转换为const uint8*



我有一个相当大的char*缓冲区(文件的内容,用streambuf-sgetn读取(。我需要将它传递给一个内部函数,其中需要const uint8*。如果不重新解释(不允许(,我怎么能做到这一点?

选项1:使用reinterpret_cast,违反disallowance。

选项2:更改前提,从一个无符号的char(即std::uint8_t(缓冲区开始,而不是char缓冲区,这样就不需要转换。

有了这样的限制,可以通过强制转换为void*来强制转换为所需的指针类型。任何指针都可以投射到void*,也可以投射到任何指针(如果需要,可以保持或生成常量(。

#include <cstdint>
void f(const uint8_t* p) {}
int main() {
char p[] = "";
f(static_cast<uint8_t*>(static_cast<void*>(p)));
}

最新更新