【问题标题】:PHP can't count (binary-hex weirdness)?PHP 数不清(二进制十六进制怪异)?
【发布时间】: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 字符转换为每个字符字节的二进制表示。

标签: php perl binary hex


【解决方案1】:

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

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

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

【讨论】:

  • 天啊.. 我想我不是直截了当:D 谢谢!
猜你喜欢
  • 2023-03-22
  • 2014-10-30
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2012-04-08
相关资源
最近更新 更多