2011-12-09 21 views
30

文字列をASCII値に変換する方法は?文字列をASCII値のPythonに変換する

例えば、「こんにちは」を返します104105.

私が個別にORD(「H」)とORD(「I」)を行うことができますが、文字が多いときに面倒なことになるだろう。

答えて

55

あなたは、リストの内包表記を使用することができます。

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

あなたの結果は、連結したい場合は、あなたの質問に示したように、あなたが何かを試みることができる:ここで

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

をかなり簡潔です連結を実行する方法:

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

と楽しい代替の並べ替え:

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

私は何を考えていましたか?これは私のものよりもはるかに不快です。それは、私がHaskell質問の束を読んだ直後にPythonの質問に答えるために得たものです。+1 – Nate

1

なぜ(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'] 
>>> 

このような問題はありません。

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

あなたの説明はかなり混乱しています。小数点を直接連結することは、ほとんどのコンテキストでは有用ではないようです。次のコードは各文字を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 
関連する問題