I am trying to understand what from_bytes()
actually does.
The documentation mention this:
The byteorder argument determines the byte order used to represent the integer. If byteorder is "big", the most significant byte is at the beginning of the byte array. If byteorder is "little", the most significant byte is at the end of the byte array. To request the native byte order of the host system, use sys.byteorder as the byte order value.
But this does not really tell me how the bytes values are actually calculated. For example I have this set of bytes:
In [1]: byte = b'\xe6\x04\x00\x00'
In [2]: int.from_bytes(byte, 'little')
Out[2]: 1254
In [3]: int.from_bytes(byte, 'big')
Out[3]: 3859021824
In [4]:
I tried ord()
and it returns this:
In [4]: ord(b'\xe6')
Out[4]: 230
In [5]: ord(b'\x04')
Out[5]: 4
In [6]: ord(b'\x00')
Out[6]: 0
In [7]:
I don't see how either 1254
or 3859021824
was calculated from the values above.
I also found this question but it does not seem to explain exactly how it works.
So how is it calculated?
from_bytes() Introduction. Return the integer represented by the given array of bytes.
To join a list of Bytes, call the Byte. join(list) method. If you try to join a list of Bytes on a string delimiter, Python will throw a TypeError , so make sure to call it on a Byte object b' '. join(...)
The byteorder argument determines the byte order used to represent the integer. If byteorder is "big" , the most significant byte is at the beginning of the byte array. If byteorder is "little" , the most significant byte is at the end of the byte array.
Big byte-order is like the usual decimal notation, but in base 256:
230 * 256**3 + 4 * 256**2 + 0 * 256**1 + 0 * 256**0 = 3859021824
just like
1234 = 1 * 10**3 + 2 * 10**2 + 3 * 10**1 + 4 * 10**0
For little byte-order, the order is reversed:
0 * 256**3 + 0 * 256**2 + 4 * 256**1 + 230 = 1254
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With