Я столкнулся с интересным поведением в индексировании строк Python, и я думаю, что это может быть ошибка.Ошибка индексации строки Python?
Цель моего кода, чтобы выполнить ряд манипуляций, чтобы превратить шестнадцатеричной строки в двоичные (12 бит) и взять подмножество (10 LSB) двоичной строки
Код, который дает мне результат ожидать, выглядит следующим образом:
def test (hex):
print (bin(int(hex,16))[2:].zfill(12)[3:12])
если вход "1", то есть шестигранные = "1"
bin(int(hex,16))
возвращает 0b1
, как и ожидалось
bin(int(hex,16))[2:]
избавляется от ведущих 0b
и возвращает 1
- работает, как и ожидалось [2:] дают 3-й символ и onwords
bin(int(hex,16))[2:].zfill(12)
возвращает 0000_0000_0001
(«_» добавлена для иллюстрации)
теперь приходит интересная часть для того, чтобы получить 10 LSB, то есть 3-го по 12-й гольца можно было бы использовать
bin(int(hex,16))[2:].zfill(12)[2,11]
однако, кажется, что я должен был использовать bin(int(hex,16))[2:].zfill(12)[3,12]
, чтобы получить 00_0000_0001
, что, по-видимому, указывает на то, что индексирование стало 1
основано вместо 0
основано после .zfill(12)
?
Результаты получают с Python 3.4.1
Любое предложение ценится!
Вот код теста:
def test (hex):
print (int(hex,16)) # bfn hex string to intege
print (bin(int(hex,16))) # integer to binary string "return 0b...."
print (bin(int(hex,16))[2:]) # get rid of the leading "0b"
print (bin(int(hex,16))[2:].zfill(12)) # fill the string to length of 12 bits
print (bin(int(hex,16))[2:].zfill(12)[3:12])
для теста:
test("1")
выход:
1
0b1
1
000000000001
0000000001
как насчет знака? –
Можете ли вы привести примеры ваших тестовых входов для воспроизведения нечетного поведения? Я чувствую, что вы можете использовать число, которое уже составляет 13 бит (поэтому zfill (12) не добавляет и не обрезает никакую цифру) – fortran
вы предлагаете .zfill() внесла дополнительный бит знака (и он не виден в печати())? – haomin