def asn1_integer(i):
if i >= 0:
i = decimal_to_binary(i)
if len(i) < 8:
i = ('0'* (8 - len(i))) + i
我希望i
的长度是8的倍数。因此,我需要一个函数,将'0'
s添加到比特串的开头,相对于8k - len(i) = number_of_additional_bits
方程。
p.s.此任务禁止使用bin
、hex
、str
、int
、bytearray
、divmod
功能。
decimal_to_binary(i)
通过使用逐位运算符将十进制等价物转换为二进制等价物。
计算下一个大于字符串长度的8的倍数很简单。使用divmod
将当前长度除以8。如果有余数,那么最后一个字符串的长度需要为(quotient + 1) * 8
。如果没有余数,您只需要quotient * 8
i = "11001"
str_len = len(i)
req_len, remainder = divmod(str_len, 8)
if remainder: req_len += 1
req_len *= 8
然后,将字符串填充到req_len
:
i = f'{i:>0{req_len}}' # '00011001'
f'...'
构造被称为f-string,是一种简单的字符串插值方法。更多信息