在下面的代码行中,我需要通过其字段之一中的字节偏移量来调整指针pm
。有没有比不断地从char *
和PartitionMap *
来回投射以使指针算法仍然有效的更好/更简便的方法呢?
PartitionMap *pm(reinterpret_cast<PartitionMap *>(partitionMaps));
for ( ; index > 0 ; --index)
{
pm = (PartitionMap *)(((char *)pm) + pm->partitionMapLength);
}
return pm;
对于那些无法理解代码的人,它将在从
PartitionMap
继承的缓冲区中遍历可变长度描述符。同样对于相关人员,partitionMapLength始终返回其运行系统所支持的长度。我正在遍历的数据符合UDF规范。
最佳答案
我经常使用这些模板:
template<typename T>
T *add_pointer(T *p, unsigned int n) {
return reinterpret_cast<T *>(reinterpret_cast<char *>(p) + n);
}
template<typename T>
const T *add_pointer(const T *p, unsigned int n) {
return reinterpret_cast<const T *>(reinterpret_cast<const char *>(p) + n);
}
它们维护类型,但向其中添加单个字节,例如:
T *x = add_pointer(x, 1); // increments x by one byte, regardless of the type of x