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

问题描述 投票:0回答:2

我有一个字符串,其值为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';
}
?>
php regex
2个回答
0
投票

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

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

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

你在原始代码中所做的是将二进制数转换为十六进制数然后反过来。毫不奇怪它没有给你预期的结果,因为123不是二进制数,在输入中没有任何其他数字而不是01


0
投票

首先,功能不像你想象的那样起作用,即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';
}
?>
© www.soinside.com 2019 - 2024. All rights reserved.