0

I look some solution in this site but those not works in python 3.7. So, I asked a new question.

Hex string of "the" is "746865"

I want to a solution to convert "the" to "746865" and "746865" to "the"

  • @KenWhite use this converter https://www.browserling.com/tools/text-to-hex –  Sep 01 '18 at 14:12

4 Answers4

1

Given that your string contains ascii only (each char is in range 0-0xff), you can use the following snippet:

In [28]: s = '746865'

In [29]: import math

In [30]: int(s, base=16).to_bytes(math.ceil(len(s) / 2), byteorder='big').decode('ascii')
Out[30]: 'the'

Firstly you need to convert a string into integer with base of 16, then convert it to bytes (assuming 2 chars per byte) and then convert bytes back to string using decode

awesoon
  • 32,469
  • 11
  • 74
  • 99
1
    #!/usr/bin/python3
    """
    Program name:  txt_to_ASC.py

    The program transfers
    a string of letters -> the corresponding
      string of hexadecimal ASCII-codes,
    eg.  the -> 746865

    Only letters in [abc...xyzABC...XYZ] should be input.

    """
    print("Transfer letters to hex ASCII-codes")
    print("Input range is [abc...xyzABC...XYZ].")
    print()
    string = input("Input set of letters, eg. the: ")
    print("hex ASCII-code: " + " "*15, end = "")

    def str_to_hasc(x):
        global glo

        byt = bytes(x, 'utf-8')
        bythex = byt.hex()

        for b1 in bythex:
            y = print(b1, end = "")
            glo = str(y)
        return glo

    str_to_hasc(string)
jeppe
  • 9
  • 5
  • Usually it's better to explain a solution instead of just posting some rows of anonymous code. You can read [How do I write a good answer](https://stackoverflow.com/help/how-to-answer), and also [Explaining entirely code-based answers](https://meta.stackexchange.com/questions/114762/explaining-entirely-%E2%80%8C%E2%80%8Bcode-based-answers) – Anh Pham Nov 19 '18 at 13:28
0

If you have a byte string, then:

>>> import binascii
>>> binascii.hexlify(b'the')
b'746865'

If you have a Unicode string, you can encode it:

>>> s = 'the'
>>> binascii.hexlify(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
>>> binascii.hexlify(s.encode())
b'746865'

The result is a byte string, you can decode it to get a Unicode string:

>>> binascii.hexlify(s.encode()).decode()
'746865'

The reverse, of course, is:

>>> binascii.unhexlify(b'746865')
b'the'
Mark Tolonen
  • 166,664
  • 26
  • 169
  • 251
0
    #!/usr/bin/python3
    """
    Program name:  ASC_to_txt.py
    The program's input is a string of hexadecimal digits.
    The string is a bytes object, and each byte is supposed to be
    the hex ASCII-code of a (capital or small) letter.

    The program's output is the string of the corresponding letters.

    Example
    Input:            746865
    First subresult:  ['7','4','6','8','6','5']
    Second subresult: ['0x74', '0x68', '0x65']
    Third subresult:  [116, 104, 101]
    Final result:     the

    References
    Contribution by alhelal to stackoverflow.com (20180901)
    Contribution by QintenG to stackoverflow.com (20170104)
    Mark Pilgrim, Dive into Python 3, section 4.6
    """
    import string

    print("The program converts a string of hex ASCII-codes")
    print("into the corresponding string of letters.")
    print("Input range is [41, 42, ..., 5a] U [61, 62, ..., 7a]. \n")
    x = input("Input the hex ASCII-codes, eg. 746865: ")

    result_1 = []
    for i in range(0,len(x)//2):
        for j in range(0,2):
            result_1.extend(x[2*i+j])
            # First subresult

    lenres_1 = len(result_1)

    result_2 = []
    for i in range(0,len(result_1) - 1,2):
        temp = ""
        temp = temp + "0x" + result_1[i]      #0, 2, 4
        temp = temp +        result_1[i + 1]  #1, 3, 5
        result_2.append(temp)
        # Second subresult

    result_3 = []
    for i in range(0,len(result_2)):
        result_3.append(int(result_2[i],16))
        # Third subresult

    by = bytes(result_3)
    result_4 = by.decode('utf-8')
    # Final result

    print("Corresponding string of letters:" + " "*6, result_4, end = "\n")
jeppe
  • 9
  • 5
  • 1
    The two programs, **ASC_to_txt.py** and **txt_to_ASC.py**, both input and output strings. – jeppe Nov 19 '18 at 13:31