BTC交易数据 - VarInt

BTC交易数据 - VarInt

全名是 Variable-length Integer,是一种基于动态产犊表示整数的编码方式,常用于比特币协议中。

编码规则

  1. 如果需要表示的数值小于 253(16进制:0xfd),就用一个字节表示整数值。该字节的数值就是需要表示的值

99

  1. 如果需要表示的数值大于等于 253(16进制:0xfd)且 小于等于 65535(16进制:0xffff),使用三个字节表示整数值。编码时用第一个字节固定为 0xfd,后面两个字节使用小端模式表示值。

253

  1. 如果需要表示的数值大于 65535(16进制:0xfe)且 小于等于 0xffffffff(4,294,967,295),则使用五个字节表示,第一个字节为0xfe,后面四个字节为整数值的小端表示使用三个字节表示整数值。编码时第一个字节固定为 0xfe,后面四个字节使用小端模式表示值。

10,0000

  1. 如果整数值大于 0xffffffff(4,294,967,295),则使用九个字节表示,第一个字节为0xff,后面八个字节为整数值的小端表示。

编解码脚本

源码地址

def encode_varint(value):
    if value < 0xfd:
        return bytes([value])
    elif value <= 0xffff:
        return b'\xfd' + value.to_bytes(2, 'little')
    elif value <= 0xffffffff:
        return b'\xfe' + value.to_bytes(4, 'little')
    else:
        return b'\xff' + value.to_bytes(8, 'little')


def decode_varint(data):
    first_byte = data[0]
    if first_byte < 0xfd:
        return first_byte, 1
    elif first_byte == 0xfd:
        return int.from_bytes(data[1:3], 'little'), 3
    elif first_byte == 0xfe:
        return int.from_bytes(data[1:5], 'little'), 5
    elif first_byte == 0xff:
        return int.from_bytes(data[1:9], 'little'), 9


# 示例
# 这里输入整数值
value = 100000
encoded_varint = encode_varint(value)
decoded_varint, length = decode_varint(encoded_varint)

print("Original Value:", value)
print("Encoded VarInt:", "0x" + encoded_varint.hex())
print("Decoded VarInt:", decoded_varint)
print("Length:", length)
ecoded VarInt:", decoded_varint)
print("Length:", length)

关注我,关注我的专栏,一起探索Web3的世界

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值