I'm trying to use the socket library in python to send bytes of two hex digits to a piece of hardware programmed to accept them. To create the bytes from a user inputed string of hex digits, I'm trying to use bytes.fromhex() class method described here: https://docs.python.org/dev/library/stdtypes.html#bytes.fromhex
Why does the following:
hexstring = "bb 0D 02 55 55 5A ce"
data = bytes.fromhex(hexstring)
print(data)
give me:
b'\xbb\r\x02UUZ\xce'
instead of:
b'\xbb\x0d\x02\x55\x55\x5a\xce'
?
And how do I get it to give me the second output? I'm using python 3.5.
解决方案
This has nothing to do with bytes.fromhex(). You'd get the same result if you entered your expected result into Python:
>>> b'\xbb\x0d\x02\x55\x55\x5a\xce'
b'\xbb\r\x02UUZ\xce'
The repr() representation of a bytes object will always use ASCII printable characters and short one-letter escape sequences where possible.
So \x0d is displayed as \r, because that's the ASCII code point for a carriage return. \x55 is the printable ASCII character U, etc.
If this is an issue for you, you'll have to explicitly convert your bytes value to hexadecimal again:
>>> b'\xbb\r\x02UUZ\xce'.hex()
'bb0d0255555ace'