例如: 源数据是 "70015", Compact Size编码后"0xFE 7F 11 01 00" 而直接转成16进制存储"1117F" 不是更节省空间吗?
猜想: 对于区块链解析区块结构时, 拿到手的源数据如何区分字段, 是不是只能固定字段长度才能区分字段?
例如: 源数据是 `1a1117F` 其中a字段的数据是'1A', b字段是'1117F'。
此时为了区分a字段b字段 只能事先约定好a字段b字段各种都占4个字节, 那此时源数据就需变成`0000001A0001117F`, 按4个字节去分割数据 区分 a字段 `0000001A`和b字段`0001117F`
可以看出对于小数据很多'0'占位符, 如果字段最大值支持32个字节呢?
如果改用Compact Size 源数据是 `1A FE 7F 11 01 00` 按compact size的规则, 从头解析 1A 非'FD'/'FE'/'FF' 则认为是一个小于255的字段 则a字段是'1A' 接着解析到 FE 代表该字段是在(65536 - 4294967295)这个范围内,即取后面4个字节即可 则 b字段的值是 '7F 11 01 00' (小端序) ———> 即 '00 01 11 7F' ———> '1117F' , 其中a字段的数据是'1a', b字段是'1117F'。
结论: 直接使用源数据'0000001A0001117F'和 compact size的源数据 '1AFE7F110100' 肯定是Compact Size跟节省空间,而且支持的数据范围更广