将字符串转换为 ASCII 值 python

问题描述 投票:0回答:10

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

例如,“hi”将返回

[104 105]

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

python ascii
10个回答
149
投票

您可以使用列表理解:

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

33
投票

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

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

还有一种有趣的选择:

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

14
投票

到 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 值”是没有意义的。)


8
投票

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

>>> list(bytes(b'test'))
[116, 101, 115, 116]

7
投票

如果您希望连接结果,正如您在问题中所示,您可以尝试以下操作:

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

3
投票

为什么要连接(十进制)“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']
>>>

注意没有这样的问题。


3
投票

你的描述相当混乱;在大多数情况下,直接连接十进制值似乎没有用。以下代码会将每个字母转换为 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

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

1
投票

你实际上可以用 numpy 来做到这一点:

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

0
投票

如果您不介意 numpy 依赖性,您也可以通过简单地将字符串转换为 1D numpy ndarray 并将其视为整数来实现。

import numpy as np

text = "hi"
np.array([text]).view(int).tolist()   # [104, 105]

请注意,与内置

ord()
函数类似,上述操作返回字符的 unicode 代码点(仅当字符串很长时才会更快),而
.encode()
将字符串文字编码为字节文字,仅允许ASCII 字符对于当前问题的范围来说不是问题,但如果您有非 ASCII 字符,例如日语、俄语等,您可能无法得到您所期望的结果。

例如:

s = "Меси"
list(map(ord, s))                 # [1052, 1077, 1089, 1080]
np.array([s]).view(int).tolist()  # [1052, 1077, 1089, 1080]
list(s.encode())                  # [208, 156, 208, 181, 209, 129, 208, 184]
© www.soinside.com 2019 - 2024. All rights reserved.