PHP цикл через шестнадцатеричные числа из формы POST всегда дает первое число как 0. почему? - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть форма с двумя текстовыми полями, «от» и «до».

, когда я ввожу такие значения, как «100000» и «10000F» и выполняю цикл for, он всегда выглядит как:

0 100001 100002 100003 100004 100005 100006 100007 100008 100009 10000a 10000b 10000c 10000d 10000e 10000f

если я вручную добавлю диапазон для цикла, я получу:

100000100001 100002 100003 100004 100005 100006 100007 100008 100009 10000a 10000b 10000c 10000d 10000e 10000f

с использованием:

for ($i = '0x'.$_POST['from']; $i <= '0x'.$_POST['to']; $i++) { print dechex($i)."\n"; }

против:

for ($i = 0x100000; $i <= 0x10000F; $i++) { print dechex($i)."\n"; }

, если кто-нибудь знает, что я делаюздесь не так, пожалуйста, дайте мне знать.

Я также попытался добавить «0x» к числам через форму с теми же результатами.

спасибо!

Ответы [ 5 ]

3 голосов
/ 22 ноября 2010

Пока $i++ преобразует $i в число, оно не выполняется до окончания первого цикла.Очевидно, dechex не пытается интерпретировать строки как числа, а просто как barfs.

Чтобы форсировать преобразование, добавьте к строковому выражению префикс +:

for ($i = +('0x'.$_POST['from']); $i <= '0x'.$_POST['to']; $i++) {
    print dechex($i)."\n";
}

Протестировано и работает наPHP 5.2.6.

(обратите внимание, что приведение не работает! (int)('0x100000') возвращает 0.)

2 голосов
/ 22 ноября 2010

Вы должны использовать intval() для преобразования шестнадцатеричной строки в число. dechex() возьмет число и превратит его в шестнадцатеричную строку:

$from = intval('100001', 16);
$to = intval('10000f', 16);

for ($i = $from; $i <= $to; $i++) {
  print dechex($i) . "\n";
}
0 голосов
/ 22 ноября 2010

Вы также можете сделать

for ($i = intval('0x'.$_POST['from'], 0); $i <= intval('0x'.$_POST['to'], 0); $i++) { print dechex($i)."\n"; }

0 голосов
/ 22 ноября 2010

Вам нужно сначала преобразовать вашу шестнадцатеричную строку в фактическое целое число.Что-то вроде , эта функция выполняет .

В противном случае PHP будет обрабатывать ее как строку.

0 голосов
/ 22 ноября 2010

'0x' $ _ POST [ 'от']. это строка $ i = 0x100000 это число

Ваша первая итерация преобразует строковое значение в число, используя стандартное приведение PHP (в качестве целочисленного значения для первого нечислового символа, который представляет собой «x», дающий начальное значение 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...