如何在保留填充的同时将填充字符串转换为整数?

时间:2010-07-12 21:03:09

标签: python string padding integer

我按照 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

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

欣赏任何指示或建议。

非常感谢, 杰克

编辑:在得知整数没有填充的启示后,我的想法有点不同,但是解释更多可能是一个好主意:

我正在书中进行基本的加密练习。它给了我一个pseduocode列表 - 获取密码字符串1-127和消息,将两者转换为二进制,剥离0b,并用零填充。然而,它希望我在没有异常的情况下完成剩下的工作!我一次得到那么远的一行,但现在来了(问题开始的地方):

  • 执行手动XOR操作&将二进制7位结果附加到加密字符串
  • 将消息字符和键的每个二进制位转换为整数
  • 对这两位执行XOR操作
  • 将文字True和False转换为二进制位&追加到输出

我喜欢使用XOR操作,但我害怕这样做,我不会去学习我需要的东西。

-J

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

整数没有填充的概念,但如果你想要,那么你可以存储值和原始长度,而不仅仅是值:

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

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

答案 2 :(得分:0)

前导零仅用于数据表示:

"{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

答案 3 :(得分:-1)

由于INT类型是一个数字,它将被存储而不带前导零。为什么要将675存储为00675?这在整数领域毫无意义。我建议将整数存储为整数,然后在访问它们时将其应用并打印出来(或者不管你用它们做什么)