关于网友提出的“ 正在做bittorrent文件解析器,遇到一个问题”问题疑问,本网通过在网上对“ 正在做bittorrent文件解析器,遇到一个问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 正在做bittorrent文件解析器,遇到一个问题
描述: 关于bittorrent文件的协议都知道了,也实现了解析string ,int ,list, dict的方法,并能成功解析,可是bittorrent文件中有一个字段是pieces,协议说这个字段的意思是:一个长度为20的整数倍的字符串。它将再被分隔为20字节长的字符串,每个子串都是相应片断的hash值。
问题来了.如 6:pieces22560:?S?S}煸粡mb剉渋......
根据上面的字串解析得到pieces的长度为22560,也就是说从后面取出长度为22560的串就是hash过的值,可是后面到文件结尾也没有这么多字符了.
是不是22560这个值还要进行一下计算才能使用.请做过的朋友指点一下.
解决方案1: 我是想好好回答,我帮你分析,你却搞一句"再错也不会错那儿",你说我怎么想,老实说我先不会考虑到你用错fread了
解决方案2: 读取没有错吧,只是内容中存在 '\0'
而通过控制台输出时遇到'\0'就当作字符串结束了
后面的自然看不到,其实数据还是在的
解决方案3: 要直接看内存,另外通过fread返回值来看看具体读取到的长度
FILE *fp;
fp=fopen(filepath,"rb");
char sk[200000]={0};
int len = fread(sk,1,200000,fp); //这行改成这个,看看len是多少
fclose(fp);
解决方案4: 另外对于你的代码,呵呵,问题在于不要用strlen来获取你读到的内容长度,因为这个函数是通过\0来判断结尾的,长度应该从fread的返回值来获得
我上面说过了啊,那个所谓的空心方块就是\0
解决方案5: 用fread(s,sizeof(char),22560,fp)来读,返回值就是读到的长度了
没解析过,呵呵
以上介绍了“ 正在做bittorrent文件解析器,遇到一个问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3085713.html