通过 void* 和 reinterpret_cast从字节字段读取
Reading from a byte field by void* and reinterpret_cast
我计划通过以下方式从void*
给出的字节字段中读取类型T
:
template <class T>
T read(void* ptr){
return reinterpret_cast<T>(*ptr);
}
但我有一些疑问:取消引用void*
实际上会给reinterpret_cast<T>
带来什么?只是那个位置的字节?或者"神奇地"T
长度的字节序列?我应该先把void*
投进T*
吗?
您不能取消引用 void 指针,它不指向对象。但 C 标准规定:
指向
void
的指针可以转换为指向任何对象类型的指针,也可以从指向任何对象类型的指针相互转换。
我们可以先将ptr
转换为T*
,然后取消引用它:
template <class T>
T read(void* ptr) {
return *static_cast<T*>(ptr);
}
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 如何使用连接器 c++ 在 mySQL 表二进制(16) 字段中存储 c++ 字节数组?
- 浅拷贝到协议缓冲区的字节字段中
- 两个 4 位位字段加起来不等于一个字节的大小 - 如何修复?
- 为什么在未由语言本身定义的结构字节中的位字段顺序
- 在DEBUG模式下调整字节字段大小时发生访问冲突
- 对C++中的字节字段使用char*或void*或其他什么
- 通过 void* 和 reinterpret_cast从字节字段读取
- 如何在C++中从字节数组(在 BIG-ENDIAN 中)中提取单个字段
- 从 6 字节字段计算哈希
- 在编译时根据字节序定义位字段
- 删除内存字段(数组)中的单个字节
- 读取存储在双精度体中的8字节字段中的4个字节
- 如何将SAFEARRAY(字节数组)放入HTML隐藏字段
- 函数接受两个参数,一个字节和一个位字段,并返回字节中字段的值