在Java中,我可以轻松地将数字转换为一个字节,例如:
System.err.println((byte) 13020);
Run Code Online (Sandbox Code Playgroud)
结果将是
-36
Run Code Online (Sandbox Code Playgroud)
现在我如何在PHP中实现相同的目标?
echo ($a&0x7f) + ($a&0x80?-128:0);
Run Code Online (Sandbox Code Playgroud)
编辑这个模仿了签名的8位值实际应该发生的事情.当MSB(第7位)为零时,我们只有这7位的值.将MSB设置为1,我们从-128(即1000000b == -128d)开始.
您还可以利用PHP在内部使用整数值的事实:
$intsize = 64; // at least, here it is...
echo ($a<<($intsize-8))/(1<<($intsize-8));
Run Code Online (Sandbox Code Playgroud)
因此,当php看到它时,将字节的MSB移位到int的MSB位置,即在右侧添加56个零位.该部门"剥离"这些位,同时保持值的符号.
也许做一个模 256 表达式(如果无符号)或模 256 和负 128。
$val = ($val % 256) - 128
Run Code Online (Sandbox Code Playgroud)
如果您只想要一个值,则此方法有效。如果你想要一个真正的单字节,也许 pack() 函数在这里会有所帮助。
编辑:对,0 将是 128,所以也许这个解决方案会起作用:
$val = (($val+128) % 256) - 128
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |