php转换为byte,

sha*_*hay 4 php byte casting

在Java中,我可以轻松地将数字转换为一个字节,例如:

System.err.println((byte) 13020);
Run Code Online (Sandbox Code Playgroud)

结果将是

-36
Run Code Online (Sandbox Code Playgroud)

现在我如何在PHP中实现相同的目标?

mvd*_*vds 6

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个零位.该部门"剥离"这些位,同时保持值的符号.


Pio*_*ler 3

也许做一个模 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)