Output from to_bytes
Chris Angelico
rosuav at gmail.com
Sun May 26 09:26:33 EDT 2013
On Sun, May 26, 2013 at 10:02 PM, Mok-Kong Shen
<mok-kong.shen at t-online.de> wrote:
> I don't understand why with the code:
>
> for k in range(8,12,1):
> print(k.to_bytes(2,byteorder='big'))
>
> one gets the following output:
>
> b'\x00\x08'
> b'\x00\t'
> b'\x00\n'
> b'\x00\x0b'
>
> I mean the 2nd and 3rd should be b'\x00\x09' and b'x00\x0a'.
> Anyway, how could I get the output in the forms I want?
They are. If you compare them, you'll find they're identical:
>>> b'\x00\t' == b'\x00\x09'
True
>>> b'\x00\n' == b'\x00\x0a'
True
It's just a representation issue. The repr() of a bytes tries to go
for the shorter representation \n rather than the more verbose \x0a.
(Though I'm not sure why it doesn't also shorten \x00 to \0 - maybe
the \0 notation isn't deemed Pythonic, even though it does work just
fine.) So what you want is a more fixed representation.
What you may find useful here is that iterating over the bytes object
produces integers:
>>> list(b'\0\t')
[0, 9]
So you might be able to do something like this:
>>> print(''.join(('\\x%02x'%x for x in b'\0\t')))
\x00\x09
Or, in your whole loop:
>>> for k in range(8,12,1):
print(''.join(('\\x%02x'%x for x in k.to_bytes(2,byteorder='big'))))
\x00\x08
\x00\x09
\x00\x0a
\x00\x0b
Does that help?
ChrisA
More information about the Python-list
mailing list