Python: 3 ways to convert a string to a hexadecimal value

In Python and the world of software development, a hexadecimal value (or hex value) is a representation of a number using base-16 digits and alphabets. It consists of digits 0-9 and letters A-F. The prefix `0x` is optional and sometimes used to indicate that a value is hexadecimal, but it is not required. Hexadecimal values are used for memory addresses, bitwise operations, data encoding, and representing colors in computer graphics, etc.

This succinct and straight-to-the-point article will walk you through several different ways to turn a string into a hexadecimal value in Python. Without any further ado, letâ€™s get started!

Using the hex() method

If you are using Python 3.5 or newer, you can use the `encode()` and the `hex()` methods to convert a given string to a hex value with a single line of code.

Example:

``````text = "Sling Academy"
hex = text.encode("utf-8").hex()
print(hex)``````

Output:

``536c696e672041636164656d79``

The syntax is very concise and intuitive. I guess you will like it the most. There is one more thing that I think might help you when using the `hex()` function. If you want the resulting hex string to be more readable, you can set a custom separator with the `sep` parameter as shown below:

``````text = "Sling Academy"
hex = text.encode("utf-8").hex(sep="_")
print(hex)``````

Output:

``53_6c_69_6e_67_20_41_63_61_64_65_6d_79``

Using the binascii.hexlify() function

This approach works with both old versions of Python (2.x) and new versions of the programming language (3.x). What we will do are:

1. Encode the string to bytes using the desired encoding, such as `encode("utf-8")`.
2. Call the `binascii.hexlify()` function to convert the bytes to a hexadecimal representation.
3. Decode the resulting bytes as a string to obtain the hex value.

Code example:

``````import binascii

encoded_bytes = string.encode('utf-8')
hex_value = binascii.hexlify(encoded_bytes).decode('utf-8')

print(hex_value)``````

Output:

``536c696e672041636164656d79``

This approach is straightforward, works will all versions of Python and doesnâ€™t rely on any third-party library. However, it requires encoding and decoding steps limited to ASCII characters and might not handle non-ASCII characters well.

Using list comprehension and the ord() function

In this technique, we will convert each character in the string to its corresponding Unicode code point and format it as a hexadecimal value. The steps are:

1. Iterate through each character in the string.
2. Use `ord()` to obtain the Unicode code point of each character.
3. Format the code point as a hexadecimal string by using the `format()` function.
4. Join the hexadecimal strings together with the` join()` method.

A code example is worth more than a thousand words:

``````string = "Sling Academy"
hex_value = ''.join([format(ord(char), 'x') for char in string])

print(hex_value) ``````

Because we use the same input as other examples in this article, the output wonâ€™t be a new thing:

``536c696e672041636164656d79``

The advantage of this technique is that can handle non-ASCII characters and is flexible and customizable. The trade-off is that it requires iterating through each character, which may be less efficient for extremely large strings.

Search tutorials, examples, and resources