代码之家  ›  专栏  ›  技术社区  ›  SmartGuyz

Python到PHP的循环数组

  •  0
  • SmartGuyz  · 技术社区  · 7 年前

    我正忙着把一段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++)
        {
        }
    

    但这是我能做的,请帮忙。谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Foo Bar    4 年前

    第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
    

    我确信有许多比提供的代码更容易实现此结果的方法。它是来自一场混乱的代码竞赛吗?