[英]How to convert an int values consisting of various ASCII codes to its corresponding word string?
假設我有一堆ASCII碼加入一個int值。 例如 - 我的名字“Rahul” x =''.join(str(ord(c))for c in "Rahul"
產生8297104117108( x =''.join(str(ord(c))for c in "Rahul"
)。如何將此整數轉換回使用ASCII代碼形成的字?
如果將此值限制為8位字符集(擴展ASCII)中的可打印字符(ascii> = 32),則實際上沒有歧義。 每個字符將使用2或3位數字。 兩位數的字符將> = 32,3位數的字符將<= 255(恰好以32位以下的兩位數字開頭)。 因此,兩個連續的數字<32只能是3位數字符的開頭。
def decodeStr(s):
if s == "": return ""
code = s[:3] if s[:2] < "32" else s[:2]
return chr(int(code)) + decodeStr(s[len(code):])
sa = decodeStr("8297104117108")
print(sa) # "Rahul"
如果你有一個很長的字符串要解碼,遞歸方法可能會達到Python的最大遞歸限制。 這是函數的迭代變體:
def decodeStr(s):
result = ""
code = ""
for digit in s:
code += digit
if len(code) < 2 or code < "32" : continue
result += chr(int(code))
code = ""
return result
迭代函數的運行速度比遞歸函數快1.8倍。
這是一個簡單但不是非常有效的解決方案:
d = '8297104117108'
l = []
while d:
if d[0] == '1':
l.append(chr(int(d[:3])))
d = d[3:]
else:
l.append(chr(int(d[:2])))
d = d[2:]
print(''.join(l))
這假設您的角色范圍非常有限,如果您可以搞亂“加密”,那么將您的數字填充為長度為3.如下所示:
my_code = ''.join('{:03}'.format(ord(c))for c in "Rahul")
這將給你'082097104117108'
,你可以一次閱讀3
''.join([chr(int(my_code[i:i+3])) for i in range(0,len(my_code),3)])
假設所有代碼都在range(65,650)
的增量解決方案,因此您可以將文本擴展到所有拉丁擴展:
def decode(code):
res=''
car=0
for digit in code:
car = 10*car + int(digit)
if car >= ord('A'):
res += chr(car)
car=0
return res
decode('8297104117108')
是'Rahul'
, decode('8297250108')
是'Raúl'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.