Via io.read() method reading bytes from file got char mixed with hexadecimal number

This is my code, just reading bytes from a file, I want to get the original hexadecimal number but I get some char in the result:


Using c can read the right hexadecimal numbers

That’s just the default bytes.__str__ rendering of a bytes object.
When you go:

 print(bs)

where bs is a bytes object, you get str(bs) because print()
calls str() on every argument. That is that same syntax you can use
to define the bytes in Python code, too.

Basicly, this representation aids the eye when looking at bytes data
containing ASCII or Western Europe-ish UTF-8 data, even partially - most
byte values in the ASCII printable range are presented as their glyphs.

You can certainly dump bytes as hexadecimal data. bytes objects have a
convenience .hex() method to get it in hexadecimal form:

Example:

 >>> b'abc'.hex()
 '616263'
 >>> help(bytes.hex)
 hex(...)
     Create a str of hexadecimal numbers from a bytes object.

       sep
         An optional single character or byte to separate hex bytes.
       bytes_per_sep
         How many bytes between separators.  Positive values count from the
         right, negative values count from the left.

     Example:
     >>> value = b'\xb9\x01\xef'
     >>> value.hex()
     'b901ef'
     >>> value.hex(':')
     'b9:01:ef'
     >>> value.hex(':', 2)
     'b9:01ef'
     >>> value.hex(':', -2)
     'b901:ef'

So just call .hex() on the bytes values you’re trying to print.

The bytes type is described here:
https://docs.python.org/3/library/stdtypes.html#index-40

Cheers,
Cameron Simpson cs@cskk.id.au

1 Like

Thank you very much for your kind help :grinning: