我正在努力解决复合文档格式。
我目前正在使用C语言,但是在查找目录扇区方面存在问题。
我可以获得复杂的doc头,这是微不足道的,我知道找到扇区id(secid + 1 << sec_size
)的文件偏移的公式,但每当我使用这个公式将secid
转换为{{1对于我获得随机值的目录。
有人可以帮我理解我如何正确解决fileoffset
补偿问题,也可以帮助我解决如何从复合文档中的扇区分配表中开发secid
个链?
这是我尝试过的一个例子:
secid
<小时/> 编辑:
comp_doc_header* cdh((comp_doc_header*)buffer);
printf("cdoc header:%d\n", sizeof(cd_dir_entry));
if(cdh->rev_num == 0x003E)printf("rev match\n");
//check magic number
if(cdh->comp_doc_id[0] != (unsigned char)0xD0 ||
cdh->comp_doc_id[1] != (unsigned char)0xCF ||
cdh->comp_doc_id[2] != (unsigned char)0x11 ||
cdh->comp_doc_id[3] != (unsigned char)0xE0 ||
cdh->comp_doc_id[4] != (unsigned char)0xA1 ||
cdh->comp_doc_id[5] != (unsigned char)0xB1 ||
cdh->comp_doc_id[6] != (unsigned char)0x1A ||
cdh->comp_doc_id[7] != (unsigned char)0xE1)
return 0;
buffer += 512;
//here i try and get the first directory entry
cd_dir_entry* cde((cd_dir_entry*)&buffer[(cdh->first_sector_id + 1) << 512]);
应为(secid + 1) * 512
答案 0 :(得分:0)
这是C
吗?我无法解析您的第一个或最后发布的行
cd_dir_entry* cde((cd_dir_entry*)&buffer[(cdh->first_sector_id + 1) << 512]);
您似乎将cde
声明为返回指向cd_dir_entry的指针的函数;但是参数原型都是错误的...所以你调用函数并将结果乘以cd_dir_entry
并立即忽略乘法的结果。
修改
我的简化尝试理解这一行
cd_dir_entry* cde(<cast>&buffer[(cdh->first_sector_id + 1) << 512]);
cd_dir_entry* cde(<cast>&buffer[<elem>]);
cd_dir_entry* cde(<parameter>);
/* this is either a function prototype */
/* or a multiplication with `cd_dir_entry` and the value returned from cde() */
/* in either case it does nothing (no side-effects present), */
/* unless cde messes with global variables */