bitcoin协议系列(一)

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

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

一、variable length integer(var_int)

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

Value Storage length Format
< 0xFD 1 uint8_t
<= 0xFFFF 3 0xFD followed by the length as uint16_t
<= 0xFFFF FFFF 5 0xFE followed by the length as uint32_t
- 9 0xFF 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

当0xFFFFFFFF

换种说法,

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

回到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说明该字符串的长度,然后是字符串本身

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

转载请注明出处。

 

你可能感兴趣的:(bitcoin)