给定一个数字number
,使其数字被分组为长度n
的部分(默认值n
为3),其中每个组代表一些ascii值,我想要转换number
成为一串ascii字符。例如:
n number Output
==================================
3 70 F
3 65066066065 ABBA
4 65006600660065 ABBA
请注意,数字中没有前导0
,因此第一个ascii值不一定用n
数字表示。
我目前的代码如下:
def number_to_string(number, n=3):
number = str(number)
segment = []
while number:
segment.append(number[:n])
number = number[n:]
return str(''.join('{:0>{}}'.format(chr(segment), n) for segment in number))
预期产出:
number_to_string(70)
'F'
number_to_string(65066066065)
'ABBA'
number_to_string(65006600660065, n=4)
'ABBA'
我当前的代码会返回一个空字符串。例如,而不是' F'它返回' '
。这是什么原因?谢谢!
P.S .:
我想要反转this question的过程,即根据字符串中每个字符(数字)的ascii值将整数转换为字符串。但是阅读这个问题不是回答这个问题的必要条件。
答案 0 :(得分:1)
试试这个:
import re
def number_to_string(num, n=3):
num_str = str(num)
if len(num_str) < n:
num_str = '0' * (n-len(num_str)) + num_str
elif len(num_str) % n != 0:
num_str = '0'*(n-len(num_str)%n) + num_str
print(num_str)
chars = re.findall('.'*n, num_str)
l = [chr(int(i)) for i in chars]
return ''.join(l)
首先用给定数量的零填充给定数字(转换为字符串),以便它可以均匀地分成相等数量的字符。然后使用re
将字符串拆分为大小为n
的段。最后使用chr
将每个块转换为字符,然后使用join
加入它们。
答案 1 :(得分:0)
numeric
这有帮助吗?
答案 2 :(得分:0)
def num_to_string(num, leng):
string = ""
for i in range(0,len(str(num)),leng):
n = str(num)[i:i+2]
string += chr(int(n))
print string
输出:
>>> ================================ RESTART ================================
>>>
>>> num_to_string(650065006600,4)
AAB
>>> num_to_string(650650660,3)
AAB
>>> num_to_string(656566,2)
AAB
>>>
答案 3 :(得分:-1)
您可以将\ x附加到数字,因为这会打印&#39; p&#39;:
print '\x70'