为了账号安全,请及时绑定邮箱和手机立即绑定

求问p = atol(plen)哪里有问题?怎么改?

求问p = atol(plen)哪里有问题?怎么改?

PHP
繁花不似锦 2023-03-03 17:13:05
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'结束的数字串。

查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号