Converting int to bytes in Python 3
I was trying to build this bytes object in Python 3:
so I tried the obvious (for me), and found a weird behaviour:
>>> bytes(3) + b'\r\n' b'\x00\x00\x00\r\n'
>>> bytes(10) b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
I've been unable to see any pointers on why the bytes conversion works this way reading the documentation. However, I did find some surprise messages in this Python issue about adding
format to bytes (see also Python 3 bytes formatting):
This interacts even more poorly with oddities like bytes(int) returning zeroes now
It would be much more convenient for me if bytes(int) returned the ASCIIfication of that int; but honestly, even an error would be better than this behavior. (If I wanted this behavior - which I never have - I'd rather it be a classmethod, invoked like "bytes.zeroes(n)".)
Can someone explain me where this behaviour comes from?
That's the way it was designed - and it makes sense because usually, you would call
bytes on an iterable instead of a single integer:
>>> bytes() b'\x03'
The docs state this, as well as the docstring for
>>> help(bytes) ... bytes(int) -> bytes object of size given by the parameter initialized with null bytes