2010-07-12 22 views
3

我在 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 

但我得到的是SANS填充整数列表。

欣赏任何方向或建议。

非常感谢, 杰克

编辑:得知整数没有得到补齐启示后,我想有点不同,但它很可能是一个好主意的人进一步解释:

我正在通过一本书中的基本加密练习。它给了我一个pseduocode的列表来处理 - 获取密码字符串1-127和一条消息,将两者都转换为二进制,去掉0b,并填充零。但是,它希望我在没有XOR的情况下执行其余的操作!我已经得到了在同一时间,远远一条线,但现在我有这个(问题开始的地方):

  • 执行手动XOR运算& 7位的二进制位结果附加到加密的字符串
  • 转换每个二进制位信息字符和键的整数
  • 上这两个比特执行XOR操作
  • 转换字面真假二进制比特&追加到输出

我很喜欢使用XOR操作,但我害怕这样做,我不会去了解我需要的。

-J

+0

YMMD:D ....... – relet 2010-07-12 21:05:21

+0

当你说你想要一个“填充整数”,你真的需要什么?你怎么使用这样的号码? – Karmastan 2010-07-12 21:08:44

+0

Karmastan:我正在通过一本书中的基本加密工作。这个练习不是使用XOR操作,而是通过一系列伪代码来教导我如何在没有XOR的情况下运行。所以在这一点上pseduocode写着: - 获取每个字符的整数ASCII值在消息(完成) - 获取字符的ASCII版本的二进制值,并去掉“0B”(完成) 这是哪里出了问题开始: - 检查长度为7个字符(必要时填充以零开始)(完成) - 将消息字符和密钥的每个二进制位转换为整数(问题) 谢谢! – 2010-07-12 21:38:04

回答

9

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

+0

ohhhh这就是我错了的地方。整数没有填充。我一定是错过了那个珍闻。 谢谢! – 2010-07-12 21:08:17

-1

由于INT类型是一个数字,它将被存储而没有前导零。你为什么要将675存储为00675?这在整数领域是毫无意义的。我建议将整数存储为整数,然后在访问它们并将其打印出来时(或者您正在使用它们进行打印),仅应用填充。

4

整数没有填充的概念,但如果您想要如果你想重建原始数据,你有足够的信息,这样做

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

然后:你可以同时存储值和原来的长度,而不是仅仅的价值。您甚至可能希望创建自定义类来存储这些字段而不是使用元组。

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