我发现了一些奇怪的事 不同版本的perl的不同行为.
代码是:
$x = -806;
$x = sprintf "0x%x" , $x;
print "$x";
Run Code Online (Sandbox Code Playgroud)
在5.6.1中,我得到:0xfffffcda
在5.14我得到:0xfffffffffffffcda
我如何在5.14中获得32位?
谢谢!
带负数的东西是它们通过2s补码二进制表示.您所看到的是字大小的结果.
我不完全确定它为什么会发生变化(除了14年以及一般移动到64位),但如果不重新编译perl就不容易修复.我建议这不是一个好主意,因为你真正想要得到的是字符串化.
一个更简单的解决方案是使用适当长度的位掩码进行按位AND:
$x = -806;
$x = sprintf ("0x%x" , $x & 0xffffffff);
print "$x";
Run Code Online (Sandbox Code Playgroud)