如何从const char*转换为结构体

How to cast from const char* to a struct?

本文关键字:转换 结构体 char const      更新时间:2023-10-16

在为嵌入式Linux开发Qt应用程序期间(在性能改进方面非常受欢迎),我遇到了从字符数组转换到给定结构体的必要性。到目前为止,这是通过以下代码完成的:

MyStruct* const my_struct = reinterpret_cast< MyStruct* >(qbytearray.data());

data()是Qt类QByteArray的成员,它将字节数组转换为char*。但是,在这样做的过程中,它会对数据进行深度复制,考虑到额外的处理,这并不好。因为我只想读取数据(结构体转换将永远不会用于编辑),替代方法QByteArray::constData()是可取的,因为它不做深度复制,但相反返回const char*而不是char*

问题是:我现在应该怎么做选角?我尝试使用const_cast,但没有成功。

MyStruct* const my_struct = const_cast< MyStruct* >(qbytearray.constData()); // compile error
const MyStruct* const my_struct = const_cast< MyStruct* >(qbytearray.constData()); // compile error

reinterpret_cast也不起作用,因为"它抛弃了限定符",这是预期的。我能够做到这一点的最接近的方法是先转换到char*,然后再转换到结构体:

MyStruct* const my_struct = (MyStruct*)const_cast< char* >(qbytearray.constData()); 

,但我得到的感觉,这不仅是"绕圈"的问题,而且铸造从char*MyStruct*将最终牺牲我所期望的加工改进。

那么如何正确地进行转换呢?

这与const_cast无关。你不是在试图抛弃const -ness。

const MyStruct* my_struct = reinterpret_cast<const MyStruct* >(qbytearray.constData());