Logo

What is the correct way to convert bytes to a hex string in Python 3?

In Python 3, converting a bytes object to its hexadecimal (hex) representation is straightforward—just call the .hex() method on the bytes object. Here’s the simplest example:

some_bytes = b"\x00\xab\xff" hex_str = some_bytes.hex() print(hex_str) # Output: 00abff

Key Points:

  1. No Extra Imports Required: The .hex() method is built into Python 3.
  2. Returns a String: The .hex() method converts the bytes into a lowercase hex string without any prefixes like 0x.
  3. Uppercase vs. Lowercase: If you prefer uppercase, simply convert the string: hex_str.upper().

Alternative Method (If .hex() Isn’t Available)

If you’re on an older Python 3 version (pre 3.5) or working with an environment that doesn’t have .hex(), you can use the binascii module:

import binascii some_bytes = b"\x00\xab\xff" hex_str = binascii.hexlify(some_bytes).decode('ascii') print(hex_str) # Output: 00abff
  1. binascii.hexlify() returns a bytes object representing the hex value.
  2. .decode('ascii') converts the resulting bytes back into a standard Python string.

Using Format Strings (Less Common)

A more manual approach might look like this, but it’s rarely needed compared to .hex() or binascii:

some_bytes = b"\x00\xab\xff" hex_str = "".join(f"{byte:02x}" for byte in some_bytes) print(hex_str) # Output: 00abff

Here, f"{byte:02x}" formats

TAGS
Python
CONTRIBUTOR
TechGrind