【发布时间】:2009-10-26 04:04:28
【问题描述】:
在下面的代码行中,我需要将指针 pm 调整为其中一个字段中的字节偏移量。有没有比在char * 和PartitionMap * 不停地来回转换以使指针算术仍然有效的更好/更简单的方法?
PartitionMap *pm(reinterpret_cast<PartitionMap *>(partitionMaps));
for ( ; index > 0 ; --index)
{
pm = (PartitionMap *)(((char *)pm) + pm->partitionMapLength);
}
return pm;
对于那些无法从代码中理解的人,它正在循环通过缓冲区中的可变长度描述符,该缓冲区继承自 PartitionMap。
同样对于相关人员,partitionMapLength 始终返回运行该系统的系统支持的长度。我正在遍历的数据符合UDF 规范。
【问题讨论】:
-
循环实际上在做什么?似乎 pm 被分配了具有相同值的“索引”时间
-
它将 pm 的值更改为在 pm->partitionMapLength 中找到的值,然后再次这样做,再一次……大概,数据结构有韵律和原因,但它似乎有点不寻常。它允许通过数据进行可变大小的步骤。
-
是的,乔纳森,我这样做是为了逐步检查从设备读取的扇区大小的原始字节块。
标签: c++ c pointers char pointer-arithmetic