【问题标题】:how to convert a string into unique integer and vice versa (between 0 to 255) in python3.6如何在python3.6中将字符串转换为唯一整数,反之亦然(0到255之间)
【发布时间】:2017-12-31 11:49:26
【问题描述】:

我想像这样转换一个字符串:

input_str = "send_message"

0 到 255 之间的唯一整数,并且当我解码我的 唯一整数 时,它返回到相同的字符串 “send_message”。 如何进行这种转换,我应该将唯一整数保存到 json 文件中吗?

【问题讨论】:

  • hash(input_str) % 256。这个函数的逆是不可能的。
  • @Elmex80s 感谢您的帮助,我想要同样的回应

标签: python string python-3.x integer unique


【解决方案1】:

由于您只能有 256 个不同的字符串(因为您只有 256 个不同的整数),一种方法是将字符串存储在一个列表中。当您要构建 JSON 文件时,请在列表中查找字符串并使用其在 JSON 文件中的索引。当您读取传入的 JSON 文件时,使用其中的索引从列表中检索正确的字符串。

【讨论】:

    【解决方案2】:

    一般来说这是不可能的。

    从您的示例看来,您希望允许字符串包含小写字母字符和/或下划线字符。这意味着每个角色有 27 个选择。这意味着有 27 x 27 = 729 个可能的两个字符的字符串。您不能将 729 种不同的可能性放入 0 到 255 之间的整数中并保持它们的唯一性——会有一些碰撞给出相同的结果。因此,您无法将整数解码为明确的字符串。

    当然,随着字符串变长,情况会变得更糟。

    【讨论】:

    • @ory-daulton 谢谢,请问如何计算 27 个选项?
    • @MojtabaArvin:字母表中有 26 个字母,az,外加一个下划线。这使得 27. 假设您也不需要空格、其他标点符号或大小写区别。
    【解决方案3】:

    它可能没有什么实际相关性,但一种有趣的方法是构建一个来回映射可散列对象和基于 0 的连续索引的单一结构,如下defaultdict

    from collections import defaultdict
    d = defaultdict(lambda: len(d) // 2)
    for s in map(str, range(256)):
        d[d[s]] = s
    
    >>> d['3']
    3
    >>> d[3]
    '3'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2011-05-27
      • 2010-10-16
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多