Python hex Function

Complete guide to Python's hex function covering integer conversion, formatting, and practical examples of hexadecimal representation.

Python hex Function

Python hex Function

Last modified April 11, 2025

This comprehensive guide explores Python’s hex function, which converts integers to hexadecimal strings. We’ll cover basic usage, formatting, error handling, and practical examples of hexadecimal conversion.

Basic Definitions

The hex function converts an integer to a lowercase hexadecimal string prefixed with “0x”. Hexadecimal is base-16 number system using digits 0-9 and letters a-f.

Key characteristics: works only with integers, returns a string, handles both positive and negative numbers. The output is always prefixed with “0x”.

Basic Integer Conversion

Here’s simple usage with different integers showing how hex converts positive, negative, and zero values to hexadecimal.

basic_hex.py

Positive integers

print(hex(10)) # 0xa print(hex(255)) # 0xff

Negative integers

print(hex(-10)) # -0xa print(hex(-255)) # -0xff

Zero

print(hex(0)) # 0x0

This example shows hex with different integer values. Positive numbers get standard conversion, negatives keep their sign, and zero becomes “0x0”.

The prefix “0x” indicates hexadecimal format, similar to how Python literals are written. Letters are always lowercase.

Large Integer Conversion

The hex function handles arbitrarily large integers, making it useful for cryptographic and low-level programming applications.

large_numbers.py

Very large numbers

big_num = 2**64 - 1 print(hex(big_num)) # 0xffffffffffffffff

Extremely large numbers

huge_num = 10**100 print(hex(huge_num)) # 0x1249ad2594c37ceb0b2784c4ce0bf38ace408e211a7caab24308a82e8f10000000000000000000000000

These examples demonstrate hex with very large integers. Python’s arbitrary-precision integers mean there’s no practical limit to size.

The hexadecimal representation grows with the number’s magnitude, showing Python’s ability to handle big numbers seamlessly.

Custom Object Conversion

You can make custom objects work with hex by implementing the index special method. This example creates a custom number class.

custom_hex.py

class CustomNumber: def init(self, value): self.value = value

def __index__(self):
    return self.value

def __repr__(self):
    return f"CustomNumber({self.value})"

num = CustomNumber(42) print(hex(num)) # 0x2a

The CustomNumber class implements index to return its integer value. When we call hex on an instance, Python uses this method.

This pattern is useful for numeric wrapper classes that need to support hexadecimal conversion while maintaining their type.

Error Handling

The hex function raises TypeError when used with non-integer types. This example shows proper error handling.

errors.py

try: print(hex(“hello”)) except TypeError as e: print(f"Error: {e}") # ‘str’ object cannot be interpreted as an integer

class NoIndex: pass

try: print(hex(NoIndex())) except TypeError as e: print(f"Error: {e}") # ‘NoIndex’ object cannot be interpreted as an integer

These examples demonstrate hex’s behavior with unsupported types. Strings and objects without index raise TypeError.

To make a class work with hex, implement index as shown in the previous example.

Hexadecimal Formatting Alternatives

This example compares hex with other methods for hexadecimal string formatting.

formatting.py

num = 255

Using hex()

print(hex(num)) # 0xff

Using format()

print(format(num, ‘#x’)) # 0xff print(format(num, ‘x’)) # ff print(format(num, ‘04x’)) # 00ff

Using f-strings

print(f"{num:#x}") # 0xff print(f"{num:x}") # ff print(f"{num:04x}") # 00ff

This shows different ways to format numbers as hexadecimal strings. hex provides the simplest interface but less control than format or f-strings.

The format specifiers allow control over prefix inclusion, padding, and case, offering more flexibility than hex alone.

Best Practices

  • Use for readability: Prefer hex for simple conversions

  • Use format for control: When you need padding or uppercase

  • Implement index: For custom numeric types needing hex conversion

  • Handle errors: Catch TypeError when input type is uncertain

  • Document behavior: Clearly document index implementation

Source References

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Python tutorials.

ad ad