第0步:理解输入。不知道s0和s1代表什么值:
s0是至少3个字节的序列。我将假设4:
<byte-4><byte-3><byte-2><byte-1>
s1至少是1字节。我将假设1,包含以下位(其中一些是1):
abcdefgh
前5行代码指向以下数组:
aItem = [
<byte-4><byte-3><byte-2><byte-1>,
<byte-4><byte-3><byte-2>,
<byte-4><byte-3> or 000abcdefgh00000,
000abcde ]
现在我们可以开始回答这个问题了。逐行:
newb = b'' # initialize an empty byte literal
for i in items: # loop over the aItem array
tmp = i.to_bytes((i.bit_length() + 7) // 8, byteorder='little')
# little-endian byte order array, with any leading 0 bytes removed.
localnewbyte = bytes([tmp[0]])
# the first byte of tmp, which is the rightmost byte in aItem.
newb += localnewbyte
# add that byte to newb.
结果是反Climatic,一个4字节的文本。取决于s0是否有3个以上的有效字节:
<byte-1><byte-2><byte-3>000abcde
或
<byte-1><byte-2>fgh00000000abcde
我确信有许多比提供的代码更容易实现此结果的方法。它是来自一场混乱的代码竞赛吗?