如何从const char*转换为结构体
How to cast from const char* to a struct?
在为嵌入式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());
相关文章:
- 使用结构体 c++ 进行强制转换
- 使用std::copy将一个结构体的数组转换为另一个结构的Vector
- 如何将c结构体定义转换为c++
- 使用memcpy将结构体转换为字符数组
- 在结构体中包装数字以避免隐式转换的利弊
- 将字符数组类型转换为结构体(不是类/对象)
- 缓冲区到结构体的转换
- 将结构体强制转换为QByteArray类型
- 从结构体到char *的转换问题
- 将malloc转换为新的c++ for结构体
- 将c++中的结构体转换为Ruby
- 多态和通过带指针的结构体进行强制转换
- 如何将结构体强制转换为char[]数组
- int型到自定义结构体的转换
- 将POD结构体强制转换为派生类型
- Boost Fusion:将适应的结构体类型转换为文本
- 将字符缓冲区转换为结构体
- 使用指针成员对结构体进行类型转换
- 如何从const char*转换为结构体
- 将c++类转换为C结构体(以及其他)