функции isHex () и isOcta()
у меня есть две функции. IsOcta и isHex. Не может заставить isHex работать должным образом.
Проблема в isHex () заключается в том, что он не может опустить обозначение " x " исходной строки x23.
первоначально srting наговора может также быть D1CE. Поэтому добавление x, а затем сравнение не будет делать.
есть ли правильное решение для функции isHex. Также isocta правильно?
function isHex($string){
(int) $x=hexdec("$string"); // Input must be a String and hexdec returns NUMBER
$y=dechex($x); // Must be a Number and dechex returns STRING
echo "<br />isHex() - Hexa Number Reconverted: ".$y;
if($string==$y){
echo "<br /> Result: Hexa ";
}else{
echo "<br /> Result: NOT Hexa";
}
}
function IsOcta($string){
(int) $x=octdec("$string"); // Input must be a String and octdec returns NUMBER
$y=decoct($x); // Must be a Number and decoct returns STRING
echo "<br />IsOcta() - Octal Number Reconverted: ".$y;
if($string==$y){
echo "<br /> Result: OCTAL";
}else{
echo "<br /> Result: NOT OCTAL";
}
}
здесь вызов функций:
$hex = "x23"; // STRING
$octa = "023"; // STRING
echo "<br / Original HEX = $hex | Original Octa = $octa <br / ";
echo isHex($hex)."<br / ";
echo IsOcta($octa);
вот результат вызова функции:
Original HEX = x23 | Original Octa = 023
isHex() - Hexa Number Reconverted: 23
Result: NOT Hexa
IsOcta() - Octal Number Reconverted: 23
Result: OCTAL
=== = = = ПОЛНЫЙ ОТВЕТ ====
спасибо Layke для направления к встроенной функции, которая проверяет, присутствуют ли шестнадцатеричные символы в строке или нет. Также Спасибо Марио за подсказку использовать ltrim. Обе функции были необходимы, чтобы получить isHexa или шестнадцатеричную функцию для построения.
--- ОТРЕДАКТИРОВАННАЯ ФУНКЦИЯ --
// isHEX function
function isHex($strings){
// Does not work as originally suggested by Layke, but thanks for directing to the resource. It does not omit 0x representation of a hexadecimal number.
/*
foreach ($strings as $testcase) {
if (ctype_xdigit($testcase)) {
echo "<br /> $testcase - <strong>TRUE</strong>, Contains only Hex<br />";
} else {
echo "<br /> $testcase - False, Is not Hex";
}
}
*/
// This works CORRECTLY
foreach ($strings as $testcase) {
if (ctype_xdigit(ltrim($testcase , "0x"))) {
echo "<br /> $testcase - <strong>TRUE</strong>, Contains only Hex<br />";
} else {
echo "<br /> $testcase - False, Is not Hex";
}
}
}
$strings = array('AB10BC99', 'AR1012', 'x23' ,'0x12345678');
isHex($strings); // calling
вероятно, теперь это доказательство дурака ответ на функцию "является шестнадцатеричным"?
3 ответов
isHexadecimal?
PHP имеет встроенные функции для шестнадцатеричных.
см. здесь функция ctype_xdigit
: http://uk1.php.net/ctype_xdigit
<?php
$strings = array('AB10BC99', 'AR1012', 'ab12bc99');
foreach ($strings as $testcase) {
if (ctype_xdigit($testcase)) {
// TRUE : Contains only Hex
} else {
// False : Is not Hex
}
}
isOctal?
и для выяснения, является ли число восьмеричной, вы можете просто перевернуть и перевернуть.
function isOctal($x) {
return decoct(octdec($x)) == $x;
}
вы можете очистить вашу входную строку с ltrim()
затем. Просто добавьте его перед первым преобразованием:
$string = ltrim($string, "0x");
удалит оба ведущих нуля (ненужные) и x
символы.