char *FileBuff = new char[sFileLen];...//以上sFileLen、 FileBuff 都已成功赋值,不是问题,略去,从下面开始:char *pPE = FileBuff[0x3C];//取PE头开始地址char *plen = pPE + 0x50;//指向文件长度unsigned long FileLen = atol(plen);//获得文件长度,此句取值结果不正确,关键!!!...//以下略delete [] FileBuff;问题:编译已经顺利通过,运行也没有问题,但 FileLen 的结果却不正确,总是0x0,问题出在哪里?怎么修改才能使FileLen的值正确取到plen 双字长度的内容?个人感觉好像是 atol() 函数使用的错误,但不知道用什么函数合适。这段程序是我编制的一段程序的片段,是要对已读入内存FileBuff的内容进行相关操作。已知plen指向的位置存储的是unsigned long 类型的十六进制数据,而不是字符串。这个unsigned long 类型的数据即是我要提取的所谓“文件长度”FileLen,与sFileLen不是一个意思。
1 回答

婷婷同学_
TA贡献1844条经验 获得超8个赞
文件长度信息是隐含的,一般用seek()移动文件读/写指针到文件尾部,ftell()函数返回的值才是文件长度(字节数)。
另外
char *FileBuff = new char[sFileLen]; // sFileLen从何而来?
char *pPE = FileBuff[0x3C]; // pPE指向FileBuff[0x3C],就是说必有 sFileLen > 0X3C
char *plen = pPE + 0x50;// 含指0X8C开始的十进制数字串
unsigned long FileLen = atol(plen); // 即使前面都正确,这而也有问题,因为atoi()函数的参数是以'\0'结束的数字串。
- 1 回答
- 0 关注
- 60 浏览
添加回答
举报
0/150
提交
取消