文本字符串到唯一整数方法?

use*_*074 1 python python-3.x

是否有一种方法可以将一串文本转换为'you'除以外的数字

y = tuple('you')
for k in y:
  k = ord(k)
Run Code Online (Sandbox Code Playgroud)

只能一次转换一个字符?

pok*_*oke 11

为了将字符串转换为数字(反之),您应该首先使用bytes.由于您使用的是Python 3,因此字符串实际上是Unicode字符串,因此可能包含ord()值大于255的bytes字符.但每个字符只有一个字节; 所以你应该首先在这两种类型之间进行转换.

所以基本上,你正在寻找一种方法将一个bytes字符串(基本上是一个字节列表,一个数字列表0-255)转换成一个数字,反之亦然.你可以使用int.to_bytesint.from_bytes为此:

import math
def convertToNumber (s):
    return int.from_bytes(s.encode(), 'little')

def convertFromNumber (n):
    return n.to_bytes(math.ceil(n.bit_length() / 8), 'little').decode()
Run Code Online (Sandbox Code Playgroud)
>>> convertToNumber('foo bar baz')
147948829660780569073512294
>>> x = _
>>> convertFromNumber(x)
'foo bar baz'
Run Code Online (Sandbox Code Playgroud)

  • @AlihaydarGubatov 这就是[字节顺序或字节顺序](https://en.wikipedia.org/wiki/Endianness)。“little”是小端,“big”是大端。 (2认同)
  • @randomdatascientist `n.bit_length()` 为您提供用于表示数字 `n` 的位数。在(字节)字符串中,每个字符的长度为 8 位(一个字节)。由于 [`to_bytes`](https://docs.python.org/3/library/stdtypes.html#int.to_bytes) 要求您指定目标字节数,因此我们将数字的位数除以 8 以获得字节数。由于这可能会导致非整数值(例如本例中的 10.875),因此我们使用“math.ceil”对其进行舍入,以获得适合该数字所需的准确字节长度。 (2认同)