将字符串转换为ASCII值python

时间:2011-12-09 23:23:49

标签: python ascii

如何将字符串转换为ASCII值?

例如,“hi”将返回104105。

我可以单独做ord('h')和ord('i'),但是当有很多字母时,它会很麻烦。

9 个答案:

答案 0 :(得分:88)

您可以使用列表理解:

>>> s = 'hi'
>>> [ord(c) for c in s]
[104, 105]

答案 1 :(得分:19)

这是执行连接的一种非常简洁的方法:

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

还有一种有趣的选择:

>>> '%d'*len(s) % tuple(map(ord, s))
'10410110810811132119111114108100'

答案 2 :(得分:5)

如果您想要将结果连接起来,正如您在问题中所示,您可以尝试以下内容:

>>> reduce(lambda x, y: str(x)+str(y), map(ord,"hello world"))
'10410110810811132119111114108100'

答案 3 :(得分:2)

def stringToNumbers(ord(message)):
    return stringToNumbers
    stringToNumbers.append = (ord[0])
    stringToNumbers = ("morocco")

答案 4 :(得分:2)

你的描述相当令人困惑;直接连接小数值似乎在大多数情况下都没用。以下代码将每个字母转换为8位字符,然后连接。这就是标准ASCII编码的工作原理

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

答案 5 :(得分:2)

如果您使用的是python 3或更高版本,

While dr.Read
''Here,instead of creating a new string variable, we pass the value(with +1) to the declared Integer variable called LastID
 LastId = Convert.ToInt32(dr(0).ToString.Substring(4, 4)) + 1
End While

答案 6 :(得分:2)

在 2021 年,我们可以假设只有 Python 3 是相关的,所以...

如果您的输入是 bytes

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

如果您的输入是 str

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

如果您想要一个同时适用于两者的解决方案:

list(bytes(text, 'ascii'))

(如果 UnicodeEncodeError 包含非 ASCII 字符,则上述所有内容都会有意提高 str。这是一个合理的假设,因为要求非 ASCII 字符的“ASCII 值”是没有意义的。)

答案 7 :(得分:1)

为什么人们想要连接(十进制)“ascii值”并不是很明显。可以肯定的是,在没有前导零(或其他填充或分隔符)的情况下连接它们是没用的 - 没有任何东西可以从这样的输出中可靠地恢复。

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

请注意,前3个输出的长度不同。请注意,第四个结果与第一个结果相同。

>>> ["".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']
>>>

注意没有这样的问题。

答案 8 :(得分:0)

您实际上可以使用numpy做到这一点:

import numpy as np
a = np.fromstring('hi', dtype=np.uint8)
print(a)