web-dev-qa-db-ja.com

文字列をASCII値pythonに変換します

文字列をASCII値にどのように変換しますか?

たとえば、「hi」は104105を返します。

私は個別にord( 'h')とord( 'i')を行うことができますが、文字がたくさんあると面倒になります。

51
Neal Wang

リスト内包表記を使用できます:

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

連結を実行する非常に簡潔な方法を次に示します。

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

そして、一種の楽しい代替手段:

>>> '%d'*len(s) % Tuple(map(ord, s))
'10410110810811132119111114108100'
20
Andrew Clark

質問で示したように、結果を連結したい場合は、次のようなものを試してみてください。

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

python 3以上を使用している場合、

>>> list(bytes(b'test'))
[116, 101, 115, 116]
3
devunt
def stringToNumbers(ord(message)):
    return stringToNumbers
    stringToNumbers.append = (ord[0])
    stringToNumbers = ("morocco")
2
islam

あなたの説明はかなりわかりにくいです。ほとんどの場合、小数値を直接連結することは有用ではないようです。次のコードは、各文字を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
Jason Stein

(10進数の)「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つの出力の長さは異なることに注意してください。 4番目の結果は最初の結果と同じであることに注意してください。

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

そのような問題に注意してください。

1
John Machin