我有一个字符串,其值为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';
}
?>
答案 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';
}
?>