Title: Block variable length integers? Post by: DannyHamilton on December 12, 2012, 11:18:14 PM I'm never sure if questions like this belong in "Technical Support" or "Technical Discussion".
Anyhow, I was looking at this website trying to get a better understanding of the blocks in the blockchain: http://james.lab6.com/2012/01/12/bitcoin-285-bytes-that-changed-the-world I saw that the count of transactions, count of transaction inputs, response script length, number of outputs, and challenge script length are all "variable length integers": There doesn't seem to be any "size" field before the integer to indicate the length, so if I were to try to create a program that parses the blockchain, how do I know how many bytes to parse out to determine the number of transactions? Title: Re: Block variable length integers? Post by: DannyHamilton on December 12, 2012, 11:51:49 PM Never mind. I found my answer. Now to figure out the code to convert it...
Quote . . . essentially a base-128 representation of an unsigned integer with the addition of the eighth bit to mark continuation of bytes . . . The encoding assumes an octet (an eight-bit byte) where the most significant bit (MSB), also commonly known as the sign bit, is reserved to indicate whether another variable length integer octet follows . . . Here is a worked out example for the decimal number 137:
Another way to look at this is to represent the value in base-128, and then set the MSB of all but the last base-128 digit to 1. |