4

我是 PHP 的新手。我读到这将在 PHP 中dechex(255)给出相应的十六进制值。ff

我需要 的十六进制值-105。我尝试dechex(-105)并得到了结果ffffff97。但我只想97做一些事情。

在 Java 中,我知道有点明智的操作 with0xff给了我们结果97,即(byte)-105 & (byte)0xff = 0x97.

请在 PHP 中找到解决方案,就像我在 Java 中所做的那样。

4

3 回答 3

1

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
于 2015-03-09T12:41:04.107 回答
1

您可以像这样在 php 中执行此操作:

var_dump(dechex(-105 & 255))

使其脱离最后一个字节(下面的示例输出)

string(2) "97"
于 2015-03-09T12:34:21.197 回答
0

您需要二进制负值 (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));
于 2015-03-09T12:25:56.193 回答