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