我有一个字符串,其值为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';
}
?>
据我所知,您正在寻找ctype_xdigit()
函数,如果您的字符串中的所有单个字母都是十六进制数字,则返回true,否则返回false。
您只需将字符串作为参数传递:
if (ctype_xdigit($hex_string)){
echo 'hex';
} else {
echo 'not hex';
}
你在原始代码中所做的是将二进制数转换为十六进制数然后反过来。毫不奇怪它没有给你预期的结果,因为123
不是二进制数,在输入中没有任何其他数字而不是0
和1
。
首先,功能不像你想象的那样起作用,即if(hex2bin($hex))
在使用时就像是一种废话。 (它返回“123”,总是评估为“真”)
其次,考虑使用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';
}
?>