在python中如何将字符串转换为唯一的十进制数?

在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=

我需要将一个字符串,比如说“Hello world”,转换成一个唯一的十进制数。我所说的唯一性是指,即使字符串中的一小部分发生了变化,数字也应该是不同的。 此外,这个过程必须是可逆的。这就是我需要的过程:

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
填充听起来简单可行。感谢大家,这篇文章真的很有帮助!