在python中如何将字符串转换为唯一的十进制数?
我需要将一个字符串,比如说“Hello world”,转换成一个唯一的十进制数。我所说的唯一性是指,即使字符串中的一小部分发生了变化,数字也应该是不同的。 此外,这个过程必须是可逆的。这就是我需要的过程:在python中如何将字符串转换为唯一的十进制数?,python,string,Python,String,我需要将一个字符串,比如说“Hello world”,转换成一个唯一的十进制数。我所说的唯一性是指,即使字符串中的一小部分发生了变化,数字也应该是不同的。 此外,这个过程必须是可逆的。这就是我需要的过程: a = "Hello world" b = someFunction(a) print(b) --> 4324234 c = inverseOfSomeFunction(b) print(c) --> "Hello world" 我查阅了python文档,但没有找到答案。a=
a = "Hello world"
b = someFunction(a)
print(b) --> 4324234
c = inverseOfSomeFunction(b)
print(c) --> "Hello world"
我查阅了python文档,但没有找到答案。a=“Hello WORLD”
a="Hello WORLD"
def toBigInt(s):
ret=0
for i,j in enumerate(s):
ret+= ord(j)<<(i*8)
return ret
def fromBigInt(i):
s=""
while i>0:
s+=chr(i&0xff)
i=i>>8
return s
i = toBigInt(a)
print i
print fromBigInt(i)
def托宾机:
ret=0
对于枚举中的i,j:
ret+=ord(j)>8
返回s
i=托宾(a)
打印i
从BIGINT打印(i)
这样做的作用如下:ord()
对一个字符采用整数表示。这在0到255之间
没有标准的方法,但是可以在给定的编码中使用字符代码点的字节值。为什么需要这个?因为我正在构建一个简单的加密程序,作为一个学校项目,您使用的是Python2还是Python3?区别很重要:在Python2中,您正在编码字节;在Python 3中,您将编码Unicode码点。在Python 3中,尝试:some_函数=lambda s:int.from_字节(s.encode('utf8')+b'\xff','little')
和some_函数=lambda n:n.to_字节(n.bit_length()/8,'little')[:-1)。解码('utf8')
Python 3,马克·迪金森,我将尝试您的解决方案,谢谢。到目前为止,Mathias的解决方案工作得很好。Itpick:toBigInt
如何区分空字符串和包含一个空字节的一个字符串?@MarkDickinson您是对的,所有前导和尾随的\x00
都将通过此实现删除。我认为只有同时使用\x00
s存储原始长度和padd,才能避免这种情况。我知道这个问题,但并不在意,因为出于预期目的,我认为它不重要。@MarkDickinson更正:最简单的方法是,在字符串的开头和结尾处填充\x01
(或其他任何内容),并在输出上去除它们。同意;用\x01
填充听起来简单可行。感谢大家,这篇文章真的很有帮助!