开发者

PHP loop thru hex numbers from a form POST always gives the first number as 0. why?

i have a form with two text fields, "from" and "to."

when i enter values such as "100000" and "10000F" and do a for loop, it always comes out like:

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

if i plug in the range for the loop manually, i get:

100000 100001 100002 100003 1000开发者_如何学编程04 100005 100006 100007 100008 100009 10000a 10000b 10000c 10000d 10000e 10000f

using:

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

versus:

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

if anyone knows what i am doing wrong here, please let me know.

i have also tried tried adding the "0x" to the numbers via the form with the same results.

thanks!


While $i++ is converting $i to a number, this doesn't run until after the first loop. Apparently dechex doesn't try to interpret strings as numbers and just barfs.

To force conversion, prefix the string expression with a +:

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

Tested and working on PHP 5.2.6.

(Note that casting does not work! (int)('0x100000') returns 0.)


You should use intval() to convert a hex string to a number. dechex() will take the number and turn it back into a hex string:

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

for ($i = $from; $i <= $to; $i++) {
  print dechex($i) . "\n";
}


'0x'.$_POST['from']; is a string $i = 0x100000 is a number

Your first iteration will cast the string value to a number using standard PHP casting (as an integer value to the first non-numeric character, which is the 'x' giving a start value of 0)


You can also do

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


You need to convert your hex string to an actual integer first. Something like this function does.

Otherwise, PHP will handle it as a string.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜