Given a string in hexadecimal form:
s = '0xff' # or: s = 'ff'
How to convert the hex string to an integer in Python?
For example, you want to convert the hexadecimal string
'0xff' to the decimal integer
Here are a few other examples:
0x0 --> 0 0x4 --> 4 0x8 --> 8 0x12 --> 18 0x16 --> 22 0x20 --> 32 0x24 --> 36 0x28 --> 40
Hex String to Integer using int() with base 16
To convert a hexadecimal string to an integer, pass the string as a first argument into Python’s built-in
int() function. Use
base=16 as a second argument of the
int() function to specify that the given string is a hex number. The
int() function will then convert the hex string to an integer with base 10 and return the result.
Here’s a minimal example:
>>> int('0xff', base=16) 255
And here’s how you can convert the additional examples shown above:
>>> int('0x0', base=16) 0 >>> int('0x4', base=16) 4 >>> int('0x8', base=16) 8 >>> int('0x12', base=16) 18 >>> int('0x16', base=16) 22 >>> int('0x20', base=16) 32 >>> int('0x24', base=16) 36 >>> int('0x28', base=16) 40
You actually don’t need to use the prefix
'0x' because your second argument already defines unambiguously that the given string is a hexadecimal number:
>>> int('0', base=16) 0 >>> int('4', base=16) 4 >>> int('8', base=16) 8 >>> int('12', base=16) 18 >>> int('16', base=16) 22 >>> int('20', base=16) 32 >>> int('24', base=16) 36 >>> int('28', base=16) 40
However, skipping the base but leaving the prefix raises a
ValueError: invalid literal for int() with base 10: '0x28':
>>> int('0x28') Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> int('0x28') ValueError: invalid literal for int() with base 10: '0x28'
It assumes that the input string is in base 10 when in fact, it isn’t.
💡 Note: Even though passing a prefixed string
'0x...' into the
int() function is unambiguous, Python’s
int() function doesn’t accept it if you don’t also define the base. This may be fixed in future versions!
In fact, you can specify the base argument as 0 to switch on base guessing—which should be the default behavior anyway!
You can pass a prefixed string
'0x...' into the
int() function and set the base to 0 to switch on base guessing in Python. This uses the prefix to determine the base automatically—without you needing to set it to
16. Yet, you still have to set it to
0 so the benefit is marginal in practice.
>>> int('0x9', base=16) 9 >>> int('0x9', base=0) 9 >>> int('0x9', 0) 9
Converting Hex Literals to Int
If you don’t have a hex string but a hex number—called a literal—such as
0xff, you don’t even need the
int() function because Python will automatically convert it to a decimal number:
>>> 0x10 16 >>> 0xff 255
Syntax: int(value [, base]) --> int
|Argument||A Python object to be converted into an integer number. The value object must have an |
|An optional integer argument |
|Return Value||Returns an integer number after converting the input argument |
Do you still need more background information about Python’s built-in
int() function? No problem, read over the related tutorial.
Related Tutorial: Python’s Built-in
Hex to Int Table
Just for fun, here are the hex to int conversions of the powers of two:
|Hexadecimal Literal||Decimal Literal|
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. He’s author of the popular programming book Python One-Liners (NoStarch 2020), coauthor of the Coffee Break Python series of self-published books, 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.