PHP - 将值从十六进制区分为字符串

时间:2018-05-25 14:35:53

标签: php regex

我有一个字符串,其值为123,如:$string = '123';和我的十六进制值,即$hex = bin2hex($string);,返回值为313233.当我再次转换为字符串时,使用hex2bin() ,它正确返回123。但是,当我尝试制作一个"比较"它总是像十六进制值一样返回。

我知道每个数字,1,2和3都是十六进制表的一部分,但是,有没有办法可以区分每一个?我已经搜过了一些关于它的东西,但我没有解决方案。

对不起,这个问题很糟糕。但这对我有帮助。此外,我有一个疑问。

我的PHP代码:

<?php
$string = '123';
$hex = bin2hex($string);
if(hex2bin($hex)){
    echo 'hex';
}else{
    echo 'not hex';
}
?>

2 个答案:

答案 0 :(得分:0)

据我了解,您正在寻找ctype_xdigit()函数,如果字符串中的所有单个字母都是十六进制数字,则返回true,否则返回false。

您只需将字符串作为参数传递:

if (ctype_xdigit($hex_string)){
    echo 'hex';
} else {
    echo 'not hex';
}

您在原始代码中所做的是将二进制数转换为十六进制数,然后反过来。由于123不是二进制数,因此输入中不能包含{{1}以外的任何其他数字,因此它没有给您预期的结果也就不足为奇了。 }和0

答案 1 :(得分:0)

首先,功能不像你想象的那样起作用,即if(hex2bin($hex))在使用时是一种废话。 (它返回“123”,它将始终评估为“true”)

其次,考虑使用ctype_xdigit做你想做的事情

<?php
$string = '123';
$hex = bin2hex($string);
if(ctype_xdigit($hex)){
    echo 'is a hex value (was originally '+hex2bin($hex)+')';
}else{
    echo 'not hex';
}
?>