
Mark Dickinson wrote:
On Sat, Aug 8, 2009 at 10:31 PM, Guido van Rossum<guido@python.org> wrote:
-- the struct module only handles sizes 2, 4 and 8. I can hack it by going via a hex representation:
i = 10**100 b = bytes.fromhex(hex(i)[2:]) import binascii j = int(binascii.hexlify(b), 16) assert j == i
but this is a pretty gross hack.
The first part also doesn't work if hex(i) has odd length. [py3k]:
bytes.fromhex(hex(10**99)[2:]) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: non-hexadecimal number found in fromhex() arg at position 82
I think the fact that it's non-trivial to get this right first time is further evidence that it would be useful to have built-in int <-> bytes conversions somewhere.
Are there going to possibly be other conversions to bytes and back? (float, string, struct, ...) It seems to me the type conversion to and from bytes should be on the encoded non-byte type, and other types including user created ones could follow that pattern. That may allow bytes to work with any type that has the required special methods to do the conversions. Then most of the methods on bytes would be for manipulating bytes in various ways. The constructor for the int type already does base and string conversions, extending it to bytes seems like it would be natural. int(bytes) # just like int(string) bytes = bytes(int) # calls int.__to_bytes__() to do the actual work. Ron