Python将非数字字符串存储为numb

2024-06-26 14:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试找到一种方法,将任何类型的文本转换为数字,以便以后可以将其转换回文本。 所以像这样:

text = "some string"
number = somefunction(text)

text = someotherfunction(number)
print(text) #output "some string"

Tags: 方法text文本类型numberoutputstring数字
2条回答

您可以使用ASCII值来执行此操作:

ASCII到int:

ord('a')  # = 97

回到字符串:

^{pr2}$

从那里,您可以在字符串上一次迭代一个字符,并将其存储在另一个字符串中。假设您使用的是标准ASCII字符,则需要对数字进行零填充(因为有些是两位数,有些是三位数),如下所示:

s = 'My string'
number_string = ''

for c in s:
    number_string += str(ord(c)).zfill(3)

要对其进行解码,您将一次读取新字符串三个字符,并将它们解码为新字符串。在

这假设了以下几点:

  • 所有字符都可以用ASCII表示(如果不可以,可以使用Unicode代码点)
  • 您将数值存储为字符串,而不是实际的int类型(在Python中,这没什么大不了的,可以避免在不同系统上处理int的最大值)
  • 你绝对必须有一个数值,也就是说,某种十六进制表示法(可以转换成int),密码算法就不能工作了
  • 我们不是说需要以这种方式转换的文本的GB+

如果您使用的是python3,它非常简单。首先,用选定的编码将str转换为bytesutf-8通常比较合适),然后使用int.from_bytes将其转换为int

number = int.from_bytes(mystring.encode('utf-8'), 'little')

向后转换稍微有点困难(除非您存储了结果字符串应该在其他地方的长度,否则将丢失尾随的NUL字节;如果您切换到'big'结束符,则将丢失前导NUL字节,而不是尾部):

^{pr2}$

您可以在Python 2中执行类似的操作,但效率较低/不直接:

import binascii
number = int(binascii.hexlify(mystring.encode('utf-8')), 16)

hx = '%x' % number
hx = hx.zfill(len(hx) + (len(hx) & 1))  # Make even length hex nibbles
recoveredstring = binascii.unhexlify(hx).decode('utf-8')

这相当于Python3中的'big'endian方法;在每个方向上反转中间字节将得到'little'效果。在

相关问题 更多 >