- 1
- 2
- 3
- 4
- 5
- 6
- 7
def addr2str(addr):
addr=int(addr,16)
hi=((addr&0xff00)>>8)>>1
lo=(addr&0xff)>>1
blo=format(lo,'b')
bhi=format(hi,'b')
return int(bhi+blo,2)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−11
def addr2str(addr):
addr=int(addr,16)
hi=((addr&0xff00)>>8)>>1
lo=(addr&0xff)>>1
blo=format(lo,'b')
bhi=format(hi,'b')
return int(bhi+blo,2)
Математика через строки. Ничего умнее не придумал, зато работает.
Че имеем:
0b1101101011001111
Че надо:
0b11011011100111
P.S. Или там действительно надо, чтобы все ведущие нолики в lo сожрало?
... потому что по одному примеру алгоритмы не реверсятся. Задача сродни "допиши число" из всяких iq тестов.
> нетрудно представить алгоритм
Трудно. В голову пришло только "отбросить старший бит каждого байта, а оставшиеся 7 сконкатенировать получив 14-битное целое". Или всё-таки, как код сейчас и делает, отбросить ещё и все ведущие нули из младшего байта?
p.s bormand таки угадал задачу.
p.s. а нули для младшего байта добавляются с помощью .zfill(7)