如何在保留填充的情况下将填充字符串转换为整数?

3 投票
4 回答
2390 浏览
提问于 2025-04-16 01:11

我参考了这个很棒的例子: 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操作,但我担心这样做会让我无法学到我需要的东西。

4 个回答

0

前导零只是为了数据的表示方式:

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

你可以用其他位运算来替代异或运算:

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

5

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

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

这样,如果你想要恢复原始数据,就有足够的信息来做到这一点。你甚至可以考虑创建一个自定义类来存储这两个字段,而不是使用元组。

10

把“填充”这个概念用在整数上是没有意义的。如果你想打印或者表示这些数字,你需要用字符串,整数本身是没有填充的。

撰写回答