我基本上需要将这段代码移植到php
for (i = 0; i < 128/4; i++)
data32[i] = bswap_32(data32[i]);
但是,php中没有bswap函数。
有人会善意地为我提供可以解决问题的东西吗?
答案 0 :(得分:1)
这应该做(未经测试):
function bswap_32($j)
{
return (($j & 255) << 24) | (($j & 0xff00) << 8) |
(($j & 0xff0000) >> 8) | (($j & 0xff000000) >> 24);
}
或者,如果存在符号扩展问题,则应解决此问题:
function bswap_32($j)
{
return (($j & 255) << 24) | (($j & 0xff00) << 8) |
(($j & 0xff0000) >> 8) | (255 & (($j & 0xff000000) >> 24));
}
答案 1 :(得分:1)
听起来bswap_32
正在交换32位数量的endianness。
我可以给你一些代码,但我不想为他们做人的工作,所以我会解释原则:
您可以通过位移和掩码实现这一目标(例如,您需要屏蔽掉8个最低位,并将它们移到结果的最高8位位置。)
可以使用<<
和>>
运算符进行移位。可以使用&
运算符完成屏蔽。有关详细信息,请参阅PHP manual page on operators。