我正在学习如何在Python中编写DES加密代码。我在Github上遇到了这段代码(链接:https://github.com/RobinDavid/pydes/blob/master/pydes.py),但我无法理解代码的一部分。 (参见Github代码中的第123行,也在下面给出:)
def binvalue(val, bitsize): #Return the binary value as a string of the given size
binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:] # this is line 124 I'm not getting
if len(binval) > bitsize:
raise "binary value larger than the expected size"
while len(binval) < bitsize:
binval = "0"+binval #Add as many 0 as needed to get the wanted size
return binval
我理解该函数的作用(如所写:#Return二进制值为给定大小的字符串)但我不明白它是如何做到的,我不理解第124行。谢谢回答。
答案 0 :(得分:2)
binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:]
这一行是一个三元表达式,如果val
是整数,则返回val
的二进制值,否则它会在val
的ASCII码上执行相同的操作。
这是(与其他人一样)与Python 2和Python 3兼容的一种方式。
在Python 3中,val
是一个整数,作为bytes
数据的一部分,当val
是1个大小的字符串作为str
数据的一部分时在Python 2中,二元和二元没有区别。字符串。
简而言之,这是一种将字节/字符转换为字符串的二进制表示的便携方式。
请注意,作者可以从
了解更多关于python的知识while len(binval) < bitsize:
binval = "0"+binval
可以替换为binval = binval.zfill(bitsize)
。