[C#]Bencode编码算法/torrent文件解析
2016-03-15 11:00
316 查看
最近工作上的事少了些,便想起了打入冷宫N久的博客,于是找了些小玩意做做,放到博客和github上头当是给有兴趣的朋友一起交流。
首先是想简单说下torrent文件的格式,torrent文件其实说白了就是一个纯文本文件,平时用记事本直接打开有乱码那是因为编码问题造成的,这种文件是用bencode算法编码而成的,里面包含了要下载文件的名称、描述、创建日期、大小以及服务器地址等等信息,这种编码格式非常简单,格式由以下四种类型构成:
1.BInt,整数类型
在bencode编码里面,一个整数是由 'i' + 数字 + 'e' 组成的,比如数字123在经过bencode编码后就是字符串“i123e”。
2.BString,字符串类型
一个字符串在bencode编码里是由 字节长度 + ':' + 字符串 组成的,比如UTF8编码的字符串“hello world你好世界”经过bencode编码后结果是“23:hello world你好世界”。
3.BList,列表类型
列表类型跟C#里面的List<T>类型基本一致,其中T可以是bencode支持的任一种类型:BInt、BString,也可以是BList以及下面提到的BDict。
编码后的BList也是一个字符串,由'l'开头,'e'结尾,比如一个包含数字2016和字符串abcde两个元素的List在bencode中表示为“li2016e5:abcdee”。
4.BDict,字典类型
字典类型也跟C#里面的Dictionary<T,T>非常相似,T也可以是bencode支持的任一种类型,编码后的BDict也是一个字符串,由'd'开头,'e'结尾,
比如一个性别字典含有“男”=1,“女”=2,用BDict表示为“d3:男i1e3:女i2ee”。
是不是很简单?了解了以上的几种格式,我们就可以非常方便的解析torrent,一个torrent其实就是一个由bencode编码后得来的超长字符串,直接用FileStream读出然后按字节解析出来即可,附上我写的库和示例代码地址:https://github.com/tzwsoho/libbencode。
当然,其实VS的Nuget里面已经有现成的开源bencode库(http://bencode.codeplex.com/),使用命令PM> Install-Package
BencodeLibrary即可安装。
bencode格式参考了这篇文章:/article/4844170.html
首先是想简单说下torrent文件的格式,torrent文件其实说白了就是一个纯文本文件,平时用记事本直接打开有乱码那是因为编码问题造成的,这种文件是用bencode算法编码而成的,里面包含了要下载文件的名称、描述、创建日期、大小以及服务器地址等等信息,这种编码格式非常简单,格式由以下四种类型构成:
1.BInt,整数类型
在bencode编码里面,一个整数是由 'i' + 数字 + 'e' 组成的,比如数字123在经过bencode编码后就是字符串“i123e”。
2.BString,字符串类型
一个字符串在bencode编码里是由 字节长度 + ':' + 字符串 组成的,比如UTF8编码的字符串“hello world你好世界”经过bencode编码后结果是“23:hello world你好世界”。
3.BList,列表类型
列表类型跟C#里面的List<T>类型基本一致,其中T可以是bencode支持的任一种类型:BInt、BString,也可以是BList以及下面提到的BDict。
编码后的BList也是一个字符串,由'l'开头,'e'结尾,比如一个包含数字2016和字符串abcde两个元素的List在bencode中表示为“li2016e5:abcdee”。
4.BDict,字典类型
字典类型也跟C#里面的Dictionary<T,T>非常相似,T也可以是bencode支持的任一种类型,编码后的BDict也是一个字符串,由'd'开头,'e'结尾,
比如一个性别字典含有“男”=1,“女”=2,用BDict表示为“d3:男i1e3:女i2ee”。
是不是很简单?了解了以上的几种格式,我们就可以非常方便的解析torrent,一个torrent其实就是一个由bencode编码后得来的超长字符串,直接用FileStream读出然后按字节解析出来即可,附上我写的库和示例代码地址:https://github.com/tzwsoho/libbencode。
当然,其实VS的Nuget里面已经有现成的开源bencode库(http://bencode.codeplex.com/),使用命令PM> Install-Package
BencodeLibrary即可安装。
bencode格式参考了这篇文章:/article/4844170.html
相关文章推荐
- C#中string.format用法详解
- Mongo C# 操作(元素 数组 )
- 开始使用NCrawler
- C# Panel控件截图
- C#中AS和IS关键字的用法
- 你的C#代码是怎么跑起来的(二)
- .Net C# Task异步调用功能一例
- C# Language Specification
- C#中关于as关键字的使用
- [Songqw.Net 基础]C#实现简单的插件化开发,可用于WPF Winform.
- C#
- C#中的项目文件夹debug 和release的区别
- [转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造
- C#索引器
- c#类的属性和方法
- 【C#】 简单计算器设计 & 字符提取和整数整除练习
- 【C#进阶系列】11 事件
- 【C#进阶系列】10 事件
- C#中, 动态的将图片传递给ReportViewer中的报表.
- c# 数据类型占用字节数