通过 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>
带来什么?只是那个位置的字节?或者'magically'一个长度为T
的字节序列?我应该先将 void*
转换为 T*
吗?
您不能取消引用 void 指针,它不指向对象。但是 C 标准规定:
A pointer to void
may be converted to or from a pointer to any object type.
我们可以先将 ptr
转换为 T*
然后 然后 取消引用它:
template <class T>
T read(void* ptr) {
return *static_cast<T*>(ptr);
}
我计划通过以下方式从 void*
给定的字节字段中读取类型 T
:
template <class T>
T read(void* ptr){
return reinterpret_cast<T>(*ptr);
}
但我有一些疑问:取消引用 void*
实际上会给 reinterpret_cast<T>
带来什么?只是那个位置的字节?或者'magically'一个长度为T
的字节序列?我应该先将 void*
转换为 T*
吗?
您不能取消引用 void 指针,它不指向对象。但是 C 标准规定:
A pointer to
void
may be converted to or from a pointer to any object type.
我们可以先将 ptr
转换为 T*
然后 然后 取消引用它:
template <class T>
T read(void* ptr) {
return *static_cast<T*>(ptr);
}