2017-10-05 87 views
4

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

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

+1

作品走出box.https的://3v4l.org/g1ggf http://php.net/manual/en/language.types.integer.php#language.types .integer.syntax – Calimero

+1

对于整数变量**,PHP本身支持'0x ...'表示法,但是如果您有从API获得的字符串,则需要通过' hexdec()' – iainn

+0

你们其中一人可以发布这些答案吗? – Webnet

回答

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

2

因为你是从API PHP接受它会将其解释为一个字符串

echo hexdec('0x00000008');

返回整数

这应该工作。