bin()
дает двоичное представление целого числа. Конкретное целое число, которое вы запрашиваете в двоичном представлении, в этом случае является результатом struct.unpack('!I', b',\xc3Z\xfb')[0]
, который равен 751000315:
>>> struct.unpack('!I', b',\xc3Z\xfb')[0]
751000315
Двоичное представление 751000315, которое дает bin()
, равно 0b101100110000110101101011111011
, что правильно:
>>> bin(751000315)
'0b101100110000110101101011111011'
>>> 0b101100110000110101101011111011
751000315
У него тридцать цифр (плюс префикс 0b
), потому что именно столько цифр необходимо для представления этого целого числа. если бы результатом struct.unpack('!I', H(R))[0]
было, скажем, целое число 38
(например, если бы R
было '247.69.16.15'
), двоичное представление bin()
дало бы вам 0b100110
, что еще короче.
bin()
не могу догадаться, что вам нужны ведущие нули, и он, конечно, не может угадать, сколько. Что вам нужно сделать, это формат ваше целое число, например:
>>> '{:032b}'.format(struct.unpack('!I', b',\xc3Z\xfb')[0])
'00101100110000110101101011111011'
… или, в крайнем примере, который я привел выше:
>>> '{:032b}'.format(struct.unpack('!I', H('247.69.16.15'))[0])
'00000000000000000000000000100110'