Function eo::data::encode_number

source ·
pub fn encode_number(number: EOInt) -> [EOByte; 4]
Expand description

Returns an encoded byte array from number

EO uses a maximum of four bytes to represent a number in a data stream.

The value is spread across the four bytes based on if the value is greater than the defined maximum for each amount of bytes see MAX1, MAX2, MAX3

The four bytes are initialized with a value of 254. This is used later in decode_number for translating to a 0 value.

Bytes 4, 3, and 2 are set as follows if number is greater than or equal to the corresponding MAX constant.

bytes[x] = (number / MAX_x) + 1

the number is then set to be the remainder of the division as follows

number %= MAX_x

Byte 1 is simply the remaining number plus one.

bytes[0] = number + 1

Panics

This function will panic if number exceeds MAX4.

Examples

Number less than MAX1

use eo::data::encode_number;

let result = encode_number(42);
assert_eq!(result, [43, 254, 254, 254]);

since 42 is less than MAX1 it is simply incremented by 1 and the remaining bytes are set to 254

Number less than MAX2

use eo::data::encode_number;
let result = encode_number(533);
assert_eq!(result, [28, 3, 254, 254]);

since 533 is grater than MAX1 byte 2 is set to

(533 / MAX1) + 1 // 3

byte 1 is set to the the remainder + 1

(533 % MAX1) + 1 // 28

and the remaining bytes are set to 254

Number less than MAX3

use eo::data::encode_number;
let result = encode_number(888888);
assert_eq!(result, [100, 225, 14, 254]);

since 888888 is grater than MAX2 byte 3 is set to

(888888 / MAX2) + 1 // 14

byte 2 is set to

((888888 % MAX2) / MAX1) + 1 // 225

byte 1 is set to the the remainder + 1

(888888 % MAX2 % MAX1) + 1 // 100

and the last byte is set to 254

Number less than MAX4

use eo::data::encode_number;
let result = encode_number(18994242);
assert_eq!(result, [15, 189, 44, 2]);

since 18994242 is grater than MAX3 byte 4 is set to

(18994242 / MAX3) + 1 // 2

byte 3 is set to

((18994242 % MAX3) / MAX2) + 1 // 44

byte 2 is set to

((18994242 % MAX3 % MAX2) / MAX1) + 1 // 189

byte 1 is set to the the remainder + 1

(18994242 % MAX3 % MAX2 % MAX1) + 1 // 15