Print a variable in hexadecimal in Python

后端 未结 6 1307
盖世英雄少女心
盖世英雄少女心 2021-02-05 09:17

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         


        
相关标签:
6条回答
  • 2021-02-05 09:39

    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
    
    0 讨论(0)
  • 2021-02-05 09:44

    A way that will fail if your input string isn't valid pairs of hex characters...:

    >>> import binascii
    >>> ' '.join(hex(ord(i)) for i in binascii.unhexlify('deadbeef'))
    '0xde 0xad 0xbe 0xef'
    
    0 讨论(0)
  • 2021-02-05 09:50

    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
    
    0 讨论(0)
  • 2021-02-05 09:51

    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]))
    
    0 讨论(0)
  • 2021-02-05 09:53

    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.

    0 讨论(0)
  • 2021-02-05 09:57

    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
    >>> 
    
    0 讨论(0)
提交回复
热议问题