bitcoin协议系列(一)

本系列主要介绍bitcoin中用到的关于网络,数据存储等协议。

本文内容:bitcoin的message中的variable length integer(变长整数)与variable length string(变长字符串)

一、variable length integer(var_int)

var_int在bitcoin的message以及transaction中都有使用,使用方法如下:

ValueStorage lengthFormat
< 0xFD1uint8_t
<= 0xFFFF30xFD followed by the length as uint16_t
<= 0xFFFF FFFF50xFE followed by the length as uint32_t
-90xFF followed by the length as uint64_t

 

即,

当var_int的值<0xFD时,改var_int是一个uint8_t的8位无符号整数,

当0xFD<=var_int的值<=0xFFFF时,该var_int是一个以0xFD为前缀的uint16_t的16位无符号整数,

当0xFFFF<var_int的值<=0xFFFFFFFF时,该var_int时一个以0xFE为前缀的uint32_t的无符号整数,

当0xFFFFFFFF<var_int的值,该int_int是一个以0xFF为前缀的uint64_t的64位无符号整数。

换种说法,

我们知道,文件系统中文件大小的扩展方式之一是,存储该文件的地址所指的内容中的最后几个字节做扩展,这几个字节中的内容是一个指针,指向的是另一个存储文件的块。再看看二维数组的本质是存储内容为只指针的一维数组,也就是先读该一维数组的内容,再根据这个内容去读该地址的内容。

回到variable length integer,系统先读第一个字节,如果值小于0xDFD,那么它就知道该字节的值就是var_int的值,如果该字节的值

为0xFD,则接下来的两个字节(16位)代表该var_int的值,

为0xFE,则接下来的4个字节(32位)代表该var_int的值,

为0xFF,则接下来的8个字节(64位)代表该var_int的值

可以看出来,该协议就是将原本一个字节(8位)的值中的0xFD,0xFE,0xFF做了扩展(相当于一个指针,分别指向紧跟这该字节的16位,32位,64位的数据)

二、variable length string

实质上就是var_int+char[],即先是一个var_int说明该字符串的长度,然后是字符串本身

--------------------------------------------------------------------------------------------------------------------

转载请注明出处。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值