0

我正在尝试使用static_cast转换uint8_t*Some_Type_T* where Some_Type_Tis a struct

SomeType_T* pTarget = static_cast<SomeType_T*>(pData)

这给了我一个错误

invalid static_cast from type 'uint8_t [1000] {aka unsigned char [1000]}' to type 'Some_Type_T*'

基本上我想要实现的是将缓冲区(字节数组)映射到某个结构。

我已经用 C 类的演员做过很多次了。但我虽然static_cast<>更安全。

你能告诉我为什么这不起作用吗?

4

1 回答 1

2

演员的名字是:

SomeType_T* pTarget = reinterpret_cast<SomeType_T*>(pData);

因为您打算将字节数组重新解释为另一种对象类型。

实际上继续读取内存,就好像它是结构类型违反了严格的别名规则,导致未定义的行为。另一个问题是,如果pData没有正确对齐结构,那么您将得到不希望的结果。

如果您的结构类型可以轻松复制,那么您可以定义一个结构并将数据 memcpy 到其中。

于 2018-05-13T23:29:03.763 回答