簡體   English   中英

如何將包含各種ASCII碼的int值轉換為相應的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM