在PHP中交换文本的字节

时间:2011-06-02 22:02:14

标签: php

我基本上需要将这段代码移植到php

for (i = 0; i < 128/4; i++)
    data32[i] = bswap_32(data32[i]);

但是,php中没有bswap函数。

有人会善意地为我提供可以解决问题的东西吗?

2 个答案:

答案 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