PHP十六进制到整数

时间:2017-10-05 14:05:35

标签: php

我正在将PHP应用程序与使用0x000000080x20000000等形式的权限的API集成,其中每个权限都代表给定的权限。他们的API返回一个整数。在PHP中,如何将0x20000000之类的内容解释为整数,以便我可以使用按位运算符?

另一个开发者告诉我他认为这些数字是十六进制注释,但谷歌搜索,我发现有限的结果。 这些是什么类型的数字以及如何获取integer权限集并使用按位运算符来确定用户是否可以0x00000008

2 个答案:

答案 0 :(得分:3)

正如php文档中所述,很像C语言中发生的情况,这种格式在php中被识别为本机整数(用十六进制表示法)。

<?php
echo 0xDEADBEEF; // outputs 3735928559

演示https://3v4l.org/g1ggf

参考http://php.net/manual/en/language.types.integer.php#language.types.integer.syntax

因此,你可以对它们执行任何按位操作,因为它们是普通的整数,就服务器处理器上的寄存器大小而言(现在你可能正在使用64位架构,只是在说在适用的情况下,您可以使用phpinfo()并通过其他方式确认来确认。

echo 0x00000001<<3; // 1*2*2*2, outputs 8

演示https://3v4l.org/AKv7H

参考http://php.net/manual/en/language.operators.bitwise.php

正如@iainn和@SaltyPotato在各自的回答和评论中所建议的那样,由于您正在从API中读取数据,因此您可能必须处理以字符串而非本机整数形式获取的这些值。要解决这个问题,您只需要通过hexdec函数在使用前进行转换。

参考http://php.net/manual/en/function.hexdec.php

答案 1 :(得分:2)

由于您是从API接收它,因此php会将其解释为字符串

echo hexdec('0x00000008');

返回整数 8

这应该有用。