|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-08-13 22:45 UTC] iliaa@php.net
[2002-09-15 01:00 UTC] php-bugs at lists dot php dot net
[2007-03-17 18:20 UTC] lovan at lifesci dot ucsb dot edu
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 21:00:01 2025 UTC |
I'm using an integer to store an IP address as a 32-bit value rather than a dotted-quad string and get odd results. Since I'm only using it for shifting bits, I don't think it should matter that PHP is missing an unsigned integer type. $foo = (255 << 24) | (111 << 16) | (241 << 8) | 254; $octet[0] = ($foo & 0xff000000) >> 24; $octet[1] = ($foo & 0x00ff0000) >> 16; $octet[2] = ($foo & 0x0000ff00) >> 8; $octet[3] = ($foo & 0x000000ff); $quad = "$octet[0].$octet[1].$octet[2].$octet[3]"; The expected end result is that I get a dotted-quad string ($quad) that is the same as was used to build $foo. Instead, $octet[0] is miscalculated; it appears as "0" instead of 255. I've tried it for a variety of values and keep getting the same kind of erroneous result. However, if I change the statement to: $octet[0] = (($foo >> 8) & 0x00ff0000) >> 16; I get the expected result.