Convert string to ASCII value python


How would you convert a string to ASCII values?

For example, "hi" would return [104 105].

I can individually do ord(‘h’) and ord(‘i’), but it’s going to be troublesome when there are a lot of letters.

Asked By: Neal Wang



You can use a list comprehension:

>>> s = 'hi'
>>> [ord(c) for c in s]
[104, 105]
Answered By: Mark Byers

If you want your result concatenated, as you show in your question, you could try something like:

>>> reduce(lambda x, y: str(x)+str(y), map(ord,"hello world"))
Answered By: Nate

Here is a pretty concise way to perform the concatenation:

>>> s = "hello world"
>>> ''.join(str(ord(c)) for c in s)

And a sort of fun alternative:

>>> '%d'*len(s) % tuple(map(ord, s))
Answered By: Andrew Clark

It is not at all obvious why one would want to concatenate the (decimal) “ascii values”. What is certain is that concatenating them without leading zeroes (or some other padding or a delimiter) is useless — nothing can be reliably recovered from such an output.

>>> tests = ["hi", "Hi", "HI", 'x0Ax29x00x05']
>>> ["".join("%d" % ord(c) for c in s) for s in tests]
['104105', '72105', '7273', '104105']

Note that the first 3 outputs are of different length. Note that the fourth result is the same as the first.

>>> ["".join("%03d" % ord(c) for c in s) for s in tests]
['104105', '072105', '072073', '010041000005']
>>> [" ".join("%d" % ord(c) for c in s) for s in tests]
['104 105', '72 105', '72 73', '10 41 0 5']
>>> ["".join("%02x" % ord(c) for c in s) for s in tests]
['6869', '4869', '4849', '0a290005']

Note no such problems.

Answered By: John Machin
def stringToNumbers(ord(message)):
    return stringToNumbers
    stringToNumbers.append = (ord[0])
    stringToNumbers = ("morocco")
Answered By: islam

your description is rather confusing; directly concatenating the decimal values doesn’t seem useful in most contexts. the following code will cast each letter to an 8-bit character, and THEN concatenate. this is how standard ASCII encoding works

def ASCII(s):
    x = 0
    for i in xrange(len(s)):
        x += ord(s[i])*2**(8 * (len(s) - i - 1))
    return x
Answered By: Jason Stein

If you are using python 3 or above,

>>> list(bytes(b'test'))
[116, 101, 115, 116]
Answered By: devunt

you can actually do it with numpy:

import numpy as np
a = np.fromstring('hi', dtype=np.uint8)
Answered By: J.R.

In 2021 we can assume only Python 3 is relevant, so…

If your input is bytes:

>>> list(b"Hello")
[72, 101, 108, 108, 111]

If your input is str:

>>> list("Hello".encode('ascii'))
[72, 101, 108, 108, 111]

If you want a single solution that works with both:

list(bytes(text, 'ascii'))

(all the above will intentionally raise UnicodeEncodeError if str contains non-ASCII chars. A fair assumption as it makes no sense to ask for the "ASCII value" of non-ASCII chars.)

Answered By: MestreLion
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.