Source code for eolib.data.number_encoding_utils

from eolib.data.eo_numeric_limits import CHAR_MAX, SHORT_MAX, THREE_MAX


[docs] def encode_number(number: int) -> bytes: """ Encodes a number to a sequence of bytes. Args: number (int): The number to encode. Returns: The encoded sequence of bytes. """ value = number d = 0xFE if number >= THREE_MAX: d = value // THREE_MAX + 1 value = value % THREE_MAX c = 0xFE if number >= SHORT_MAX: c = value // SHORT_MAX + 1 value = value % SHORT_MAX b = 0xFE if number >= CHAR_MAX: b = value // CHAR_MAX + 1 value = value % CHAR_MAX a = value + 1 return bytes([a, b, c, d])
[docs] def decode_number(encoded_number: bytes) -> int: """ Decodes a number from a sequence of bytes. Args: encoded_number (bytes): The sequence of bytes to decode. Returns: The decoded number. """ result = 0 length = min(len(encoded_number), 4) for i in range(length): value = encoded_number[i] if value == 0xFE: break value -= 1 if i == 0: result += value elif i == 1: result += CHAR_MAX * value elif i == 2: result += SHORT_MAX * value elif i == 3: result += THREE_MAX * value return result