在 Python 中将字符串转换为整数,反之亦然
Converting string to integer and vice versa in Python
例如我有一个字符串
>>> sample = "Hello World!"
我想做一个可以将 sample
转换为 int 的函数。我知道 chr()
和 ord()
。到目前为止我用过这个:
对于String转Int
>>> res="".join([str(ord(char)) for char in sample])
>>> print(res)
72101108108111328711111410810033
现在问题来了。如何将 res
转换回 sample
。如有任何建议,我们将不胜感激。
Note: sample string can also have unicode characters in it
编辑:
nchars=len(sample)
res = sum(ord(sample[byte])<<8*(nchars-byte-1) for byte in range(nchars)) # string to int
print(''.join(chr((res>>8*(nchars-byte-1))&0xFF) for byte in range(nchars))) #int to string
我找到了这个解决方案,但是速度很慢有人知道可以改进吗
sample = "Hello World!"
d1={k:str(ord(v)) for k,v in list(enumerate(sample))}
''.join(d1.values())
'72101108108111328711111410810033'
res1="".join([chr(int(char)) for char in d1.values()])
res1
'Hello World!'
为了避免which ord(chr) belongs to which chr?
的问题,我们需要一个类似数据结构的映射,而dict是最好的存储每个字符串的方法,并使用enumerate
将它们分配给唯一的键,这将生成即时按键。
我们的 d1
看起来像这样:
{0: '72',
1: '101',
2: '108',
3: '108',
4: '111',
5: '32',
6: '87',
7: '111',
8: '114',
9: '108',
10: '100',
11: '33'}
然后是简单的部分,将字符串值转换为 int 并对其应用 chr
以转换回字符串。
因为OP
不想使用多个变量或数据结构。
sample = "Hello World!"
l_n=[str(ord(i))+str(ord('@')) for i in list(sample)]
text="".join(l_n)
n_l=[chr(int(i)) for i in text.split('64') if i.isnumeric()]
''.join(n_l)
问题是我们需要知道在哪里应用 char
所以我为每个字母添加了一个额外的 @
以便很容易将其转换回来
我正在保存由“”分隔的数字,这样可以更轻松地通过转换返回
这有效且简单:
i = "Hello World"
num = ""
for char in i:
num += str(ord(char))+" "
print(''.join(num.split()))
back = ""
for n in num.split():
back += chr(int(n))
print(back)
输出:
721011081081113287111114108100
Hello World
例如我有一个字符串
>>> sample = "Hello World!"
我想做一个可以将 sample
转换为 int 的函数。我知道 chr()
和 ord()
。到目前为止我用过这个:
对于String转Int
>>> res="".join([str(ord(char)) for char in sample])
>>> print(res)
72101108108111328711111410810033
现在问题来了。如何将 res
转换回 sample
。如有任何建议,我们将不胜感激。
Note: sample string can also have unicode characters in it
编辑:
nchars=len(sample)
res = sum(ord(sample[byte])<<8*(nchars-byte-1) for byte in range(nchars)) # string to int
print(''.join(chr((res>>8*(nchars-byte-1))&0xFF) for byte in range(nchars))) #int to string
我找到了这个解决方案,但是速度很慢有人知道可以改进吗
sample = "Hello World!"
d1={k:str(ord(v)) for k,v in list(enumerate(sample))}
''.join(d1.values())
'72101108108111328711111410810033'
res1="".join([chr(int(char)) for char in d1.values()])
res1
'Hello World!'
为了避免which ord(chr) belongs to which chr?
的问题,我们需要一个类似数据结构的映射,而dict是最好的存储每个字符串的方法,并使用enumerate
将它们分配给唯一的键,这将生成即时按键。
我们的 d1
看起来像这样:
{0: '72',
1: '101',
2: '108',
3: '108',
4: '111',
5: '32',
6: '87',
7: '111',
8: '114',
9: '108',
10: '100',
11: '33'}
然后是简单的部分,将字符串值转换为 int 并对其应用 chr
以转换回字符串。
因为OP
不想使用多个变量或数据结构。
sample = "Hello World!"
l_n=[str(ord(i))+str(ord('@')) for i in list(sample)]
text="".join(l_n)
n_l=[chr(int(i)) for i in text.split('64') if i.isnumeric()]
''.join(n_l)
问题是我们需要知道在哪里应用 char
所以我为每个字母添加了一个额外的 @
以便很容易将其转换回来
我正在保存由“”分隔的数字,这样可以更轻松地通过转换返回
这有效且简单:
i = "Hello World"
num = ""
for char in i:
num += str(ord(char))+" "
print(''.join(num.split()))
back = ""
for n in num.split():
back += chr(int(n))
print(back)
输出:
721011081081113287111114108100
Hello World