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
我确信有许多比提供的代码更容易实现此结果的方法。是不是搞代码竞赛来的?
我正忙着将 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
我确信有许多比提供的代码更容易实现此结果的方法。是不是搞代码竞赛来的?