PHP不能计数(二进制十六进制的怪异)


PHP can't count (binary-hex weirdness)?

在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

我根本不明白这一点,有人可以帮忙吗?

你的Perl和PHP实现是完全分开的。

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

您的 PHP 代码成功地将以字符串形式表示的十六进制数转换为字符串形式的等效二进制表示形式。