Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将字符串转换为整数,反之亦然_Python_String_Type Conversion_Integer - Fatal编程技术网

在Python中将字符串转换为整数,反之亦然

在Python中将字符串转换为整数,反之亦然,python,string,type-conversion,integer,Python,String,Type Conversion,Integer,例如,我有一个字符串 >>> sample = "Hello World!" 我想做的是一个可以将sample转换为int的函数。我知道chr()和ord()。到目前为止,我已经使用过: 将字符串转换为Int >>> res="".join([str(ord(char)) for char in sample]) >>> print(res) 72101108108111328711111410810

例如,我有一个字符串

>>> sample = "Hello World!"
我想做的是一个可以将
sample
转换为int的函数。我知道
chr()
ord()
。到目前为止,我已经使用过:

将字符串转换为Int

>>> res="".join([str(ord(char)) for char in sample])
>>> print(res)
72101108108111328711111410810033
现在问题出现了。如何将
res
转换回
sample
。如有任何建议,将不胜感激

注意:示例字符串中也可以包含unicode字符

编辑:

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
nchars=len(示例)
res=范围内字节(nchars)的和(ord(样本[byte])8*(nchars-byte-1))&0xFF)#int到字符串
我找到了这个解决方案,但是速度很慢。有人知道如何改进这个吗

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!'
为了避免
哪个ord(chr)属于哪个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

这是不可能的,因为数字的长度不同(准确地说是数字字符串),没有人能分辨出哪个数字属于哪个数字。@MichaelButscher我找到了一个解决方案,但速度非常慢。你能告诉我如何改进edit中的解决方案吗?如何在解决方案中对字符串使用位移位运算符?将所有ASCII组合在一起,形成一个大字符串。您知道ASCII值有不同的大小,如
0~255
,因此如何确定您需要的字符?避免将所有ASCII组合在一起,而是使用ASCII列表,然后转换为字符串。此外,您编辑的问题也不是获取信息的有效方式back@SayandipDutta通过将字符串转换为字节,虽然这段代码可以提供问题的解决方案,但最好添加上下文,说明为什么/如何工作。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。在解释代码时,用户也可能会给予您积极的反馈/支持。谢谢更新…@Ajay谢谢您的回答,但我必须在这里存储d1字典和数字数据。你可以这样想,我必须在一台电脑中将字符串转换为int,在另一台电脑中将int转换为string。我必须存储有限的数据量。你能给我提个别的建议吗。Thanks@YashMakan一旦生成了
d1
,在其他系统上就不需要这样做PC@Ajay考虑行<代码> RES1=“”.Co([ch1](int(char))中的ch1.d1.Values())< /代码>。您已经使用d1将int转换回string。因此,在这种情况下,我必须存储d1和int。。。