Python 到 PHP for 循环数组

Python to PHP for-loop array

我正忙着将 python 的一段翻译成 PHP。 PHP 我知道,但 Python 没那么多。

在所有代码中,我还有 5 行无法翻译。 有没有人愿意帮我解决这个问题?

items = []
items.append(s0 >> 0)
items.append(s0 >> 8)
items.append((s0 >> 16) | (s1 << 5))
items.append(s1 >> 3)

newb = b''
for i in items:
        tmp = i.to_bytes((i.bit_length() + 7) // 8, byteorder='little')
        localnewbyte = bytes([tmp[0]])
        newb += localnewbyte

上面的部分应该是这样的,如果我没看错的话:

    $aItems = [];
    $aItems[] = ($s0 >> 0);
    $aItems[] = ($s0 >> 8);
    $aItems[] = (($s0 >> 16) | ($s1 << 5));
    $aItems[] = ($s1 >> 3);

    for($i = 0; $i < count($aItems); $i++)
    {
    }

但这是我所知道的,请帮忙。谢谢!

第 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.

结果有点虎头蛇尾,一个 4 字节的文字。取决于 s0 是​​否有 3+ 个有效字节:

<byte-1><byte-2><byte-3>000abcde

<byte-1><byte-2>fgh00000000abcde

我确信有许多比提供的代码更容易实现此结果的方法。是不是搞代码竞赛来的?