【问题标题】:How do I convert a padded string to an integer while preserving padding?如何在保留填充的同时将填充的字符串转换为整数?
【发布时间】:2011-03-15 00:28:33
【问题描述】:

我在 Python: Nicest way to pad zeroes to string (4) 上遵循了很好的例子 但现在我需要将该填充字符串转换为填充整数。

我试过了:

   list_padded=['0001101', '1100101', '0011011', '0011011', '1101111',
      '0000001', '1110111',  1101111', '0111001', '0011011',
      '0011001'] # My padded sting list. 

   int_list=[int(x) for x in list_padded] # convert the string to an INT

但我得到的是一个没有填充的整数列表。

感谢任何方向或建议。

非常感谢, 杰克

编辑:了解整数不会被填充的启示后,我的想法有点不同,但解释更多可能是个好主意:

我正在完成书中的基本加密练习。它给了我一个要处理的伪代码列表 - 获取密码字符串 1-127 和一条消息,将两者都转换为二进制,去掉 0b,并用零填充。但是它希望我在没有异或的情况下完成其余的工作!我一次只写了一行,但现在出现了(问题开始的地方):

  • 执行手动 XOR 运算并将二进制 7 位结果附加到加密字符串
  • 将消息字符和密钥的每个二进制位转换为整数
  • 对这两位执行异或运算
  • 将文字 True 和 False 转换为二进制位并附加到输出

我很喜欢使用 XOR 运算,但我担心这样做我不会学到我需要的东西。

-J

【问题讨论】:

  • 当你说你想要一个“填充整数”时,你真正需要什么?你如何使用这样的号码?
  • Karmastan:我正在研究书中的基本加密。该练习不是使用 XOR 操作,而是引导我完成一系列伪代码,旨在教我在没有 XOR 的情况下如何工作。所以此时pseduocode读取:-获取消息中每个字符的整数ascii值(完成)-获取字符的ascii版本的二进制值并去掉“0b”(完成)这就是问题开始的地方:-检查7 个字符长度(必要时以零开头)(完成)- 将消息字符和密钥的每个二进制位转换为整数(问题)谢谢!
  • 由于您的问题已经发生了如此巨大的变化,您应该考虑提出一个新问题。

标签: python string padding integer


【解决方案1】:

将填充的想法应用于整数是没有意义的。如果你想打印/表示它们,你需要字符串,整数只是没有填充。

【讨论】:

  • 哦,这就是我错的地方。整数没有填充。我一定在某个地方错过了那个花絮。谢谢!
【解决方案2】:

整数没有填充的概念,但如果你愿意,你可以同时存储值和原始长度,而不仅仅是值:

int_list = [(int(x), len(x)) for x in list_padded]

然后,如果您想重建原始数据,您就有足够的信息来做到这一点。您甚至可能想要创建一个自定义类来存储这两个字段,而不是使用元组。

【讨论】:

    【解决方案3】:

    前导零仅用于数据表示:

    "{0:b}".format(4).zfill(8)
    

    您可以使用其他按位运算更改 XOR:

    def xor(x, y):
        return (~x & y) | (~y & x)
    
    def bool_xor(x, y):
        return ((not x) and y) or ((not y) and x)
    

    实际上,你可以用一个逻辑运算来表达所有的位运算: http://en.wikipedia.org/wiki/Functional_completeness

    【讨论】:

      【解决方案4】:

      由于 INT 类型是一个数字,它将在没有前导零的情况下存储。为什么要将 675 存储为 00675?这在整数领域毫无意义。我建议将整数存储为整数,然后仅在您访问它们并将它们打印出来(或您对它们执行的任何操作)时应用填充

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 2014-03-18
        • 2018-10-20
        • 1970-01-01
        • 1970-01-01
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        相关资源
        最近更新 更多