Bencode编码解析之流程图
Bencode是BitTorrent用在传输数据结构的一种编码方式。如我们熟知BT种子文件(后缀.torrent)就是用的Bencode编码的。Bencode编码支持四种数据类型:
- 字符串: bencode-string
- 整数: bencode-integer
- 线性表: bencode-list
- 字典表: bencode-dictionary
不妨将这四种数据类型统称bencode-value,Bencode解析语法结构可记为:
byte ::= ASCII(0) ~ ASCII(255)
digit ::= '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
digit-1~9 ::= '1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
length ::= '0' | {digit-1~9 + [{digit}...]}
bencode-value ::= bencode-string | bencode-integer | bencode-list | bencode-dictionary
bencode-string ::= length + ':' + [{byte}...]
bencode-integer ::= 'i' + {
{ '-' + digit-1~9 + [{digit}...]} | {'0' | {digit-1~9 + [{digit}...]}} + 'e'
bencode-list ::= 'l' + [{bencode-value}...] + 'e'
bencode-dictionary ::= 'd' + [{bencode-string + bencode-value}...] + 'e'
bencode-value解析流程
bencode-integer解析流程
在Bencode中整数以十进制数编码并括在“i”和“e”之间,不允许前导零(但0依然写为“0”),负数在编码后直接加前导负号,不允许负零。如整数“38”编码为“i38e”,数字“0”编码为“i0e”, “-38”编码为“i-38e”。