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

时间:2015-09-25 23:27:16

标签: python

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

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

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

2 个答案:

答案 0 :(得分:4)

如果您使用的是Python 3,那就非常简单了。首先,将str转换为bytes所选的编码(utf-8通常是合适的),然后使用int.from_bytes转换为int

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

转换回来有点棘手(并且会丢失尾随NUL个字节,除非你已经存储了生成的字符串应该在其他地方的多长时间;如果你切换到'big'字节序,你将丢失前导{{ 1}}字节而不是尾随):

NUL

你可以在Python 2中做类似的事情,但效率不高/直接:

recoveredstring = number.to_bytes((number.bit_length() + 7) // 8, 'little').decode('utf-8')

这相当于Python 3中的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') endian方法;在每个方向上反转中间字节会得到'big'效果。

答案 1 :(得分:1)

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

ASCII到int:

item

回到字符串:

ord('a')  # = 97

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

str(unichr(97))  # = 'a'

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

这假设了一些事情:

  • 所有字符都可以用ASCII表示(如果没有,可以使用Unicode代码点)
  • 您将数值存储为字符串,而不是作为实际的int类型(在Python中没有大问题 - 使您不必在不同系统上处理int的最大值)< / LI>
  • 你绝对必须有一个数值,即某种十六进制表示(可以转换为int),加密算法不起作用
  • 我们不是在谈论需要以这种方式转换的GB +文本