Print a variable in hexadecimal in Python
Solution 1
You mean you have a string of bytes in my_hex
which you want to print out as hex numbers, right? E.g., let's take your example:
>>> my_string = "deadbeef"
>>> my_hex = my_string.decode('hex') # python 2 only
>>> print my_hex
Þ ¾ ï
This construction only works on Python 2; but you could write the same string as a literal, in either Python 2 or Python 3, like this:
my_hex = "\xde\xad\xbe\xef"
So, to the answer. Here's one way to print the bytes as hex integers:
>>> print " ".join(hex(ord(n)) for n in my_hex)
0xde 0xad 0xbe 0xef
The comprehension breaks the string into bytes, ord()
converts each byte to the corresponding integer, and hex()
formats each integer in the from 0x##
. Then we add spaces in between.
Bonus: If you use this method with unicode strings (or Python 3 strings), the comprehension will give you unicode characters (not bytes), and you'll get the appropriate hex values even if they're larger than two digits.
Addendum: Byte strings
In Python 3 it is more likely you'll want to do this with a byte string; in that case, the comprehension already returns ints, so you have to leave out the ord()
part and simply call hex()
on them:
>>> my_hex = b'\xde\xad\xbe\xef'
>>> print(" ".join(hex(n) for n in my_hex))
0xde 0xad 0xbe 0xef
Solution 2
Convert the string to an integer base 16 then to hexadecimal.
print hex(int(string, base=16))
These are built-in functions.
http://docs.python.org/2/library/functions.html#int
Example
>>> string = 'AA'
>>> _int = int(string, base=16)
>>> _hex = hex(_int)
>>> print _int
170
>>> print _hex
0xaa
>>>
Solution 3
Another answer with later print/format style is:
res[0]=12
res[1]=23
print("my num is 0x{0:02x}{1:02x}".format(res[0],res[1]))
Solution 4
Use
print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))
like this:
>>> my_string = "deadbeef"
>>> print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))
0xde 0xad 0xbe 0xef
>>>
On an unrelated side note ... using string
as a variable name even as an example variable name is very bad practice.
Solution 5
You can try something like this I guess:
new_str = ""
str_value = "rojbasr"
for i in str_value:
new_str += "0x%s " % (i.encode('hex'))
print new_str
Your output would be something like this:
0x72 0x6f 0x6a 0x62 0x61 0x73 0x72
Related videos on Youtube
Yaw
Updated on July 09, 2022Comments
-
Yaw almost 2 years
I'm trying to find a way to print a string in hexadecimal. For example, I have this string which I then convert to its hexadecimal value.
my_string = "deadbeef" my_hex = my_string.decode('hex')
How can I print
my_hex
as0xde 0xad 0xbe 0xef
?To make my question clear... Let's say I have some data like
0x01, 0x02, 0x03, 0x04
stored in a variable. Now I need to print it in hexadecimal so that I can read it. I guess I am looking for a Python equivalent ofprintf("%02x", my_hex)
. I know there isprint '{0:x}'.format()
, but that won't work withmy_hex
and it also won't pad with zeroes.-
Gabriel Staples about 3 yearsSee also: Printing a Python list with hex elements.
-
-
Giannis Papaioannou almost 11 yearsI though he wanted to translate a string into hex and not to divide it into pairs of 2 . Its my fault that i didn't saw the example output
-
alexis almost 11 yearsNot your fault, if you look at the history you'll see that the original question read that way. The OP couldn't decide what to name his/her variables, but I think I fixed it for him/her...
-
Yaw almost 11 yearsThis looks like splitting a string into pairs of characters. I don't need that.
-
Valdogg21 almost 11 years+1 for calling out using
string
as a variable name. Overwriting base types with variables can lead to incredibly frustrating debugging, trust me. -
DSM almost 11 years@Valdogg21:
string
isn't a base type-- that'sstr
. It is the name of a stdlib module, however. -
Jon Clements almost 11 yearsJust to note this won't work on Python 3.x, while the
unhexlify
solution will... -
Jon Clements almost 11 years@alexis the
.decode
asstr
no longer has adecode
as it's not necessary.... andb'deadbeef'.decode('hex')
won't work ashex
encoding has been removed -
alexis almost 11 yearsBut that's just how the OP constructed the string: It's not part of the answer.
hex(ord(c))
will still convert a byte into a two-digit hex number. -
Valdogg21 almost 11 years@DSM Woops. Major duh moment.