Print bytes to hex

后端 未结 2 349
-上瘾入骨i
-上瘾入骨i 2020-12-21 21:00

I want to encode string to bytes.

To convert to byes, I used byte.fromhex()

>>> byte.fromhex(\'7403073845\')
b\'t\\x03\\x078E\'         


        
相关标签:
2条回答
  • 2020-12-21 21:56

    I want to encode string to bytes.

    bytes.fromhex() already transforms your hex string into bytes. Don't confuse an object and its text representation -- REPL uses sys.displayhook that uses repr() to display bytes in ascii printable range as the corresponding characters but it doesn't affect the value in any way:

    >>> b't' == b'\x74'
    True
    

    Print bytes to hex

    To convert bytes back into a hex string, you could use bytes.hex method since Python 3.5:

    >>> b't\x03\x078E'.hex()
    '7403073845'
    

    On older Python version you could use binascii.hexlify():

    >>> import binascii
    >>> binascii.hexlify(b't\x03\x078E').decode('ascii')
    '7403073845'
    

    How can it be displayed as hex like following? b't\x03\x078E' => '\x74\x03\x07\x38\x45'

    >>> print(''.join(['\\x%02x' % b for b in b't\x03\x078E']))
    \x74\x03\x07\x38\x45
    
    0 讨论(0)
  • 2020-12-21 21:59

    The Python repr can't be changed. If you want to do something like this, you'd need to do it yourself; bytes objects are trying to minimize spew, not format output for you.

    If you want to print it like that, you can do:

    from itertools import repeat
    
    hexstring = '7403073845'
    
    # Makes the individual \x## strings using iter reuse trick to pair up
    # hex characters, and prefixing with \x as it goes
    escapecodes = map(''.join, zip(repeat(r'\x'), *[iter(hexstring)]*2))
    
    # Print them all with quotes around them (or omit the quotes, your choice)
    print("'", *escapecodes, "'", sep='')
    

    Output is exactly as you requested:

    '\x74\x03\x07\x38\x45'
    
    0 讨论(0)
提交回复
热议问题