## Problem Formulation

💬 **Question**: How to create a string of hex digits from a list of integers (`0`

–`255`

) so that each hex digit consists of two digits such as `"00"`

, `"01"`

, …, `"fe"`

, `"ff"`

?

Here’s an example input/output pair:

**In**: [0, 1, 2, 3, 255, 254, 253]
**Out**: '00010203fffefd'

## Method 1: Bytearray

The easiest way to convert a list of ints to a hex string is to use the `bytearray(ints)`

function to create a `bytearray`

and call the `bytearray(ints).hex()`

method to convert it to a hex string.

Here’s a simple example:

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = bytearray(ints).hex() print(my_hex) # 00010203fffefd

Now, if you’re like me you’re not too comfortable with byte arrays and how they compare to the simple `byte`

type in Python. If you want to refresh your memory, feel free to check out our interesting tutorial:

🌍 **Recommended Tutorial**: Bytes vs Bytearrays in Python

## Method 2: f-String

The expression `''.join(f'{i:02x}' for i in ints)`

converts each int from a list of ints into a single two-digit hex string using f-strings and combines all those 2-digit hex strings into a single big string using the `string.join()`

method.

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join(f'{i:02x}' for i in ints) print(my_hex) # 00010203fffefd

You can learn more about the generator expression used in the join() method in our detailed tutorial here:

🌍 **Recommended Tutorial**: List Comprehension in Python — Ultimate Guide

## Method 3: Percentage Operator

The expression `''.join('%02x'%i for i in ints)`

converts each int from a list of ints into a single two-digit hex string using the percentage formatting operator and combines all those 2-digit hex strings into a single big string using the `string.join()`

method.

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join('%02x'%i for i in ints) print(my_hex) # 00010203fffefd

An interesting tutorial for you may be the following that shows how to use the different string formatting operators to convert an integer to a hexadecimal string—this is at the core of what we’re doing in the previous code snippet:

🌍 **Recommended Tutorial**: Python Int to Hex | String Formatting

## Method 4: string.format()

The expression `''.join('{:02x}'.format(i) for i in ints)`

converts each int from a list of ints into a single two-digit hex string using the `string.format()`

method and combines all those 2-digit hex strings into a single big string using the `string.join()`

method.

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join('{:02x}'.format(i) for i in ints) print(my_hex) # 00010203fffefd

I have created a whole tutorial on the `string.format()`

method—check it out here.

## Method 5: format()

The expression `''.join(format(i, '02x') for i in ints)`

converts each int from a list of ints into a single two-digit hex string using the built-in Python `format()`

function and combines all those 2-digit hex strings into a single big string using the `string.join()`

method.

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join(format(i, '02x') for i in ints) print(my_hex) # 00010203fffefd

I actually prefer this approach if you don’t want to use f-strings because it’s clean, and there is little unnecessary syntactical sugar like the percentage symbol or brackets or anything.

You can learn more about the built-in function here:

🌍 **Recommended Tutorial**: Python format() Function: No-BS Guide by Example

## Bonus Method 6: Use More Hex Digits Per Integer

What if you want to use more than two digits per hexadecimal string that was the result of the conversion from an individual integer in the list?

Say, 3 digits per hex string?

To use more than two digits per hex string when converting a list of ints to a single string of `n`

-digit hex numbers, use the format specifier `0nx`

, replacing `n`

with the number of digits you want.

`0`

stands for*“pad 0 symbols to the left to ensure that all hex strings have the same width”*`n`

stands for*“the width of the hex string after conversion”*. This is how many`0`

s are added so that each hex string has the same number of digits.`x`

stands for*“converting to a hexadecimal string representation”*. You could also convert to other numerical systems such as binary or octal. But we won’t here. 😉

For example, the expression `' '.join(f'{i:03x}' for i in ints)`

may yield this hex string `'000 001 002 003 0ff 0fe 0fd'`

:

ints = [0, 1, 2, 3, 255, 254, 253] my_hex = ' '.join(f'{i:03x}' for i in ints) print(my_hex) # 000 001 002 003 0ff 0fe 0fd

There are more ways to convert an integer to a hexadecimal number. I could come up with arbitrary many combinations of methods by just varying different approaches—but I think you’ll get the idea.

If you want to learn more methods to use as an expression within the generator expression of all previous code snippets, check out this tutorial. 👇

🌍 **Recommended Tutorial**: Convert Int to Hex

Also, you may want to check out this interesting tutorial:

🌍 **Recommended Tutorial**: Easiest Way to Convert List of Hex Strings to List of Integers

Finally, feel free to join our free email academy and download our cheat sheets:

While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.

To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.

His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.