我是 PHP 的新手。我读到这将在 PHP 中dechex(255)
给出相应的十六进制值。ff
我需要 的十六进制值-105
。我尝试dechex(-105)
并得到了结果ffffff97
。但我只想97
做一些事情。
在 Java 中,我知道有点明智的操作 with0xff
给了我们结果97
,即(byte)-105 & (byte)0xff = 0x97
.
请在 PHP 中找到解决方案,就像我在 Java 中所做的那样。
我是 PHP 的新手。我读到这将在 PHP 中dechex(255)
给出相应的十六进制值。ff
我需要 的十六进制值-105
。我尝试dechex(-105)
并得到了结果ffffff97
。但我只想97
做一些事情。
在 Java 中,我知道有点明智的操作 with0xff
给了我们结果97
,即(byte)-105 & (byte)0xff = 0x97
.
请在 PHP 中找到解决方案,就像我在 Java 中所做的那样。
dechex() 为您提供 0 到 2*PHP_INT_MAX+1 (unsigned int) 之间的十进制值的十六进制值。
任何低于 0 或高于 2*PHP_INT_MAX+1 的东西都会循环。
-105 不是 0xffffff97 ,也不是 0x97
0xffffff97 是 4294967191。而 0x97 是 151。
如果要将负数的十六进制表示形式转换为正数,请使用函数abs()
.
$abs = abs(-105); // $abs becomes +105
$hex = dechex($abs); // $hex becomes 69
您可以像这样在 php 中执行此操作:
var_dump(dechex(-105 & 255))
使其脱离最后一个字节(下面的示例输出)
string(2) "97"
您需要二进制负值 (ffffff97) 或有符号值
// for a signed value
$i = -105;
if($i < 0)
echo '-'.dechex(abs($i));
else echo dechex($i);
如果要删除前面的“f”
echo preg_replace('#^f+#', '', dechex($i));