PHP十六进制转整数

4
我正在将一个PHP应用程序与使用0x000000080x20000000等形式的权限的API集成,其中每个数字表示给定的权限。他们的API返回一个整数。在PHP中,我该如何将像0x20000000这样的内容解释为整数,以便我可以使用位运算符?另一位开发人员告诉我,他认为这些数字是十六进制注释,但在PHP中搜索时,我发现结果有限。这些数字是什么类型的,我该如何使用位运算符确定用户是否可以使用0x00000008这个整数设置的权限。

1
开箱即用。https://3v4l.org/g1ggf http://php.net/manual/en/language.types.integer.php#language.types.integer.syntax - Calimero
1
PHP原生支持0x...数字表示法,但如果你从API收到一个字符串,你需要通过hexdec()函数进行转换。 - iainn
你们中的一个能把这些发布为答案吗? - Ben
2个回答

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');

返回整数8

这应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接