【发布时间】:2014-01-04 11:27:59
【问题描述】:
在 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
我就是不明白,谁能帮忙?
【问题讨论】:
-
我需要一个二进制字符串而不是 bin 数据 :)
-
这就是它的作用。输入是字符串,输出是字符串。也不确定您的 perl 演示器在做什么,但十六进制值 0x10071C2 是 1000000000111000111000010 - 通过启动您的 calc 程序或实际计算器来确认这一点,将其设置为十六进制模式,输入您的数字,然后询问它是否为二进制。您显示的 PHP 和 Perl 值都是更大的数字。
-
嗯不是真的,在文档中,十六进制字符串只是 ASCII 值,这就是它“打印”它返回二进制字符串(不可打印字符)而不是
01001101101010二进制表示的原因。该程序按预期工作:perldoc.perl.org/functions/pack.html b* 和 B* 之间的区别 -
您的 perl 实现没有将十六进制数转换为二进制数。它将 ASCII 字符转换为每个字符字节的二进制表示。