Как преобразовать дополненную строку в целое число при сохранении заполнения? - PullRequest
3 голосов
/ 13 июля 2010

Я последовал замечательному примеру на Python: Самый хороший способ дополнить нули до строки (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

Ответы [ 4 ]

9 голосов
/ 13 июля 2010

Применение идеи заполнения к целым числам не имеет смысла. Если вы хотите напечатать / представить их, вам нужны строки, у целых чисел просто нет отступов.

4 голосов
/ 13 июля 2010

Целые числа не имеют понятия заполнения, но если вы хотите, вы можете сохранить как значение, так и исходную длину, а не только значение:

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

Тогда, если вы хотите восстановитьИсходные данные у вас достаточно информации для этого.Возможно, вы даже захотите создать собственный класс для хранения обоих этих полей вместо использования кортежа.

0 голосов
/ 13 июля 2010

Ведущие нули только для представления данных:

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

0 голосов
/ 13 июля 2010

Поскольку тип INT является числом, он будет сохранен без начальных нулей. Почему вы хотите хранить 675 как 00675? Это бессмысленно в сфере целых чисел. Я бы предложил хранить целые числа как целые числа, а затем применять отступы только тогда, когда вы обращаетесь к ним и распечатываете их (или все, что вы делаете с ними)

...