如何将带填充的字符串转换为整数并保留填充?

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

但是我得到的是一个整数列表,没有填充。欢迎任何方向或建议。
非常感谢, 杰克
编辑:在了解到整数不会被填充的启示后,我的想法有所不同,但最好还是解释一下:
我正在阅读一本基础加密练习的书。它给了我一些伪代码来工作-获取密码字符串1-127和消息,将两者转换为二进制,去掉0b,并用零填充。然而,它希望我在没有XOR的情况下完成其余部分!我已经逐行完成了这个过程,但现在出现了问题(问题开始的地方):
执行手动XOR操作并将二进制7位结果附加到加密字符串上 将消息字符和密钥的每个二进制位转换为整数 对这两个位执行XOR操作 将文字True和False转换为二进制位并附加到输出中
我很想使用XOR操作,但我担心这样做我学不到我需要的东西。
-J

当你说你需要一个“填充整数”时,你真正需要什么?你如何使用这样的数字? - Karmastan
Karmastan:我正在学习一本书中的基本加密。练习中并没有使用XOR操作,而是通过一系列伪代码来教授我如何在不使用XOR的情况下完成加密。所以现在伪代码如下:
  • 获取消息中每个字符的整数ASCII值(已完成)
  • 获取ASCII版本字符的二进制值并去掉“0b”(已完成)
这就是问题开始的地方:
  • 检查7个字符长度(必要时在开头填充零)(已完成)
  • 将消息字符和密钥的每个二进制位转换为整数(问题)
谢谢!
- Jack Tranner
1
由于您的问题已经发生了如此巨大的变化,建议您考虑开一个新的问题。 - Ignacio Vazquez-Abrams
4个回答

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

哦,那就是我错了。整数没有填充。我一定在某个地方错过了这个细节。 - Jack Tranner

5

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

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


-1

由于 INT 类型是一个数字,它将被存储为没有前导零的数字。您为什么想要将 675 存储为 00675?这在整数的范畴内是没有意义的。我建议将整数存储为整数,然后只有在访问它们并打印它们(或者任何您想做的事情)时应用填充。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接