在Java中,我可以轻松地将数字强制转换为字节,例如:
System.err.println((byte) 13020);
结果将是
-36
现在如何在PHP中实现相同的功能?
也许做模256表达式(如果是无符号的)或模256加负128。
$val = ($val % 256) - 128
如果您只想要一个值,这项工作。如果您想要一个实数字节,也许pack()函数会在这里有所帮助。
编辑:对,0将是128,所以也许此解决方案可以起作用:
$val = (($val+128) % 256) - 128
echo ($a&0x7f) + ($a&0x80?-128:0);
edit模仿一个带符号的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移到了php所看到的int的MSB位置,即,在右侧添加了56个零位。除法“除掉”那些位,同时保持值的符号。
你不能。 PHP没有Java那样的byte
数据类型。