2016-03-28 106 views
4

我想分割一個整數到列表中,並將每個元素轉換爲它的ASCII字符。我想要這樣的事情:數字到ASCII字符串轉換器

integer = 97097114103104 
    int_list = [97, 97, 114, 103, 104] 

    chr(int_list[0]) = 'a' 
    chr(int_list[1]) = 'a' 
    chr(int_list[2]) = 'r' 
    chr(int_list[3]) = 'g' 
    chr(int_list[4]) = 'h' 

    ascii_char = 'aargh' 

有沒有一種方法可以做到這一點?我希望它能用於任何數字,如'65066066065',這將返回'ABBA''70',這將返回'F'。我遇到的問題是我想將整數分成正確的數字。

+0

爲什麼會是[[9 7,97,...]'而不是'[9,70,97,...]'? – mgilson

+0

@mgilson預先設置0將長度變成3的倍數,然後分割。 (或者至少這是我能理解的) –

回答

3

看來你採取了十進制ascii值,所以3位數字是一個字符。 使用x mod 1000,會給你數字的最後三位數字。 迭代數字。 示例代碼:

integer = 97097114103104 
ascii_num = '' 
while integer > 0: 
    ascii_num += chr(integer % 1000) 
    integer /= 1000 
print ascii_num[::-1] #to Reverse the string 
+1

我在想一些類似的東西,我認爲你應該檢查它是一個100以下的ascii代碼的情況。像97,以防在那之前沒有0。 – Olegp

+1

但是,這是因爲它是在數字的開頭,所以這個代碼沒有問題,例如在它的數字中間保存爲097 –

+1

是的,前97個將被最後吃掉,這意味着它沒有問題,但在那裏不保證沒有0.中間不會有另外的97.如果在第一次輸入後承諾0,那麼你的代碼就是成品。 – Olegp

1

如何像這樣

integer = 97097114103104 
#Add leaving 0 as a string 
data='0'+str(integer) 
d=[ chr(int(data[start:start+3])) for start in range(0,len(data),3)] 

息率

['a', 'a', 'r', 'g', 'h'] 
+1

你是怎麼得到'integer ='097097114103104'的?在OP的例子中它是'integer = 97097114103104' –

+1

我編輯了起始值! –

+1

整數= 97097114103104 data ='0'+ str(整數) –

2

另一種方法可以使用textwrap

>>> import textwrap 
>>> integer = 97097114103104 
>>> temp = str(integer) 
>>> temp = '0'+temp if len(temp)%3==2 else temp 
>>> [chr(int(i)) for i in textwrap.wrap(temp,3)] 
['a', 'a', 'r', 'g', 'h'] 

而對於其他範例

>>> import textwrap 
>>> integer = 65066066065 
>>> temp = str(integer) 
>>> temp = '0'+temp if len(temp)%3==2 else temp 
>>> [chr(int(i)) for i in textwrap.wrap(temp,3)] 
['A', 'B', 'B', 'A'] 

對於integer = 102103

>>> import textwrap 
>>> integer = 102103 
>>> temp = str(integer) 
>>> temp = '0'+temp if len(temp)%3==1 else temp 
>>> [chr(int(i)) for i in textwrap.wrap(temp,3)] 
['f', 'g'] 

如果你想零的填充 「防呆」 你可以使用zfill作爲

temp = temp.zfill((1+len(temp)/3)*3) 
+1

@Opticgenius是的,'進口textwrap'。我會補充說, –

+1

謝謝,我也喜歡這種方法。 – RoadRunner

+1

不客氣,很樂意幫忙 –