On Sun, May 26, 2013 at 10:02 PM, Mok-Kong Shen <mok-kong.s...@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 -- http://mail.python.org/mailman/listinfo/python-list