2024-06-26 14:14:14 发布
网友
我目前正在尝试找到一种方法,将任何类型的文本转换为数字,以便以后可以将其转换回文本。 所以像这样:
text = "some string" number = somefunction(text) text = someotherfunction(number) print(text) #output "some string"
您可以使用ASCII值来执行此操作:
ASCII到int:
ord('a') # = 97
回到字符串:
从那里,您可以在字符串上一次迭代一个字符,并将其存储在另一个字符串中。假设您使用的是标准ASCII字符,则需要对数字进行零填充(因为有些是两位数,有些是三位数),如下所示:
s = 'My string' number_string = '' for c in s: number_string += str(ord(c)).zfill(3)
要对其进行解码,您将一次读取新字符串三个字符,并将它们解码为新字符串。在
这假设了以下几点:
如果您使用的是python3,它非常简单。首先,用选定的编码将str转换为bytes(utf-8通常比较合适),然后使用int.from_bytes将其转换为int:
str
bytes
utf-8
int.from_bytes
int
number = int.from_bytes(mystring.encode('utf-8'), 'little')
向后转换稍微有点困难(除非您存储了结果字符串应该在其他地方的长度,否则将丢失尾随的NUL字节;如果您切换到'big'结束符,则将丢失前导NUL字节,而不是尾部):
NUL
'big'
您可以在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'效果。在
'little'
您可以使用ASCII值来执行此操作:
ASCII到int:
回到字符串:
^{pr2}$从那里,您可以在字符串上一次迭代一个字符,并将其存储在另一个字符串中。假设您使用的是标准ASCII字符,则需要对数字进行零填充(因为有些是两位数,有些是三位数),如下所示:
要对其进行解码,您将一次读取新字符串三个字符,并将它们解码为新字符串。在
这假设了以下几点:
如果您使用的是python3,它非常简单。首先,用选定的编码将
str
转换为bytes
(utf-8
通常比较合适),然后使用int.from_bytes
将其转换为int
:向后转换稍微有点困难(除非您存储了结果字符串应该在其他地方的长度,否则将丢失尾随的
^{pr2}$NUL
字节;如果您切换到'big'
结束符,则将丢失前导NUL
字节,而不是尾部):您可以在Python 2中执行类似的操作,但效率较低/不直接:
这相当于Python3中的
'big'
endian方法;在每个方向上反转中间字节将得到'little'
效果。在相关问题 更多 >
编程相关推荐