PHP无法计算(二进制十六进制怪异)?

时间:2013-12-16 21:51:31

标签: php perl binary hex

在Perl中,我的代码运行正常:

print unpack('B*','10071C2');

返回00110001001100000011000000110111001100010100001100110010

使用GMP移植到PHP的代码:

function gmp_convert($num, $base_a, $base_b)
{
        return gmp_strval ( gmp_init($num, $base_a), $base_b );
}
$test = "10071C2";
$testb=gmp_convert($test, 16, 2);

生成10000000110110001110000101001101111110110001101110000111

我认为它可能是字节顺序,但是如果我在Perl中使用b*,它仍会产生其他内容:

PHP---10000000110110001110000101001101111110110001101110000111
PERL--10001100000011000000110011101100100011001100001001001100

我根本不理解这一点,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

你的Perl和PHP实现完全不同。

Perl代码将输入字符串中的每个字符转换为该字符的ASCII代码的二进制表示形式。例如,第一个字符("1")被转换为"00110001",等于小数49,即字符1的ASCII代码。

您的PHP代码successfully converts以字符串形式表示的十六进制数字形式为字符串形式的等效二进制表示。