Bencode编码解析之流程图

本文介绍了Bencode编码,一种在BitTorrent中用于数据传输的编码方式。内容涵盖Bencode的四种数据类型:字符串、整数、线性表和字典表的解析流程,并通过实例展示了编码规则。后续会探讨具体的编码实现,可能采用状态机方法。
摘要由CSDN通过智能技术生成

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解析流程

Created with Raphaël 2.1.2 开始 读取字符 ? = 'i' 解析<bencode-integer> 解析成功? 成功 Error ? = 'l' 解析<bencode-list> ? in ['0'..'9'] 解析<bencode-string> ? = 'd' 解析<bencode-dictionary> yes no yes no yes no yes no yes no

bencode-integer解析流程

       在Bencode中整数以十进制数编码并括在“i”和“e”之间,不允许前导零(但0依然写为“0”),负数在编码后直接加前导负号,不允许负零。如整数“38”编码为“i38e”,数字“0”编码为“i0e”, “-38”编码为“i-38e”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值