在 Java 中,我可以轻松地将数字转换为字节,例如:
System.err.println((byte) 13020);
结果会是
-36
现在如何在 PHP 中实现相同的功能?
最佳答案
echo ($a&0x7f) + ($a&0x80?-128:0);
编辑 这模拟了一个带符号的 8 位值实际应该发生的情况。当 MSB(第 7 位)为零时,我们只有这 7 位的值。当 MSB 设置为 1 时,我们从 -128 开始(即 1000000b == -128d
)。
您还可以利用 PHP 在内部使用整数值这一事实:
$intsize = 64; // at least, here it is...
echo ($a<<($intsize-8))/(1<<($intsize-8));
因此您将字节的 MSB 移动到 int 的 MSB 位置,如 php 所见,即您在右侧添加 56 个零位。除法会“剥离”这些位,同时保持值的符号。
关于php - 在 PHP 中将数字转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3361642/