Indeterminate-length big-endian to little-endian conversion in Python I have a need to convert wire encoding (big-endian) to little-endian in Python.

The conversion needs to happen as a separate function; I am not allowed to change the function that reads the byte stream because it will break a lot of other functions.

The best I can think of is this:

def be_to_le(value: int) -&gt; int:
    assert isinstance(value, int)
    numbytes = len(f"0{value:x}") &gt;&gt; 1
    if numbytes == 1:
        return value
    rslt = 0
    for b in value.to_bytes(numbytes, byteorder="little"):
        rslt &lt;&lt;= 8
        rslt |= b
    return rslt


Is there a better way?
To calculate number of bytes, better use:

numbytes = math.ceil(value.bit_length() / 8)


And then you can just:

def be_to_le(value: int) -&gt; int:
    numbytes = math.ceil(value.bit_length() / 8)
    return int.from_bytes(value.to_bytes(numbytes, byteorder="little"), byteorder="big")