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

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不是一个意思。

繁花不似锦
浏览 61回答 1
1回答

婷婷同学_

文件长度信息是隐含的,一般用seek()移动文件读/写指针到文件尾部,ftell()函数返回的值才是文件长度(字节数)。另外char *FileBuff = new char[sFileLen]; // sFileLen从何而来?char *pPE = FileBuff[0x3C]; // pPE指向FileBuff[0x3C],就是说必有 sFileLen > 0X3Cchar *plen = pPE + 0x50;// 含指0X8C开始的十进制数字串unsigned long FileLen = atol(plen); // 即使前面都正确,这而也有问题,因为atoi()函数的参数是以'\0'结束的数字串。
打开App,查看更多内容
随时随地看视频慕课网APP