note 90142 modified in function.pack by felipe

From: Date: Sun, 12 Apr 2009 20:01:15 +0000
Subject: note 90142 modified in function.pack by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-153126@lists.php.net to get a copy of this message
These two functions allow conversion between binary string and signed integer with possibility to give the bit length. Usage: <?php echo si2bin(-10, 32); 11111111111111111111111111110110 echo si2bin(10, 32); 00000000000000000000000000001010 echo bin2si("11111111111111111111111111110110", 32); -10 echo bin2si("00000000000000000000000000001010", 32); 10 // signed integer to binary function si2bin($si, $bits=32) { if ($si >= -pow(2,$bits-1) and $si <= pow(2,$bits-1) ) { if ($si >= 0) // positive or zero { $bin = base_convert($si,10,2); // pad to $bits bit $bin_length = strlen($bin); if ($bin_length < $bits) $bin = str_repeat ( "0", $bits-$bin_length).$bin; } else // negative { $si = -$si-pow(2,$bits); $bin = base_convert($si,10,2); $bin_length = strlen($bin); if ($bin_length > $bits) $bin = str_repeat ( "1", $bits-$bin_length).$bin; } return $bin; } } // binary to signed integer function bin2si($bin,$bits=32) { if (strlen($bin)==$bits) { if (substr($bin,0,1) == 0) // positive or zero { $si = base_convert($bin,2,10); } else // negative { $si = base_convert($bin,2,10); $si = -(pow(2,$bits)-$si); } return $si; } } ?> --was-- These two functions allow conversion between binary string and signed integer with possibility to give the bit length. Usage: echo si2bin(-10, 32); 11111111111111111111111111110110 echo si2bin(10, 32); 00000000000000000000000000001010 echo bin2si("11111111111111111111111111110110", 32); -10 echo bin2si("00000000000000000000000000001010", 32); 10 // signed integer to binary function si2bin($si, $bits=32) { if ($si >= -pow(2,$bits-1) and $si <= pow(2,$bits-1) ) { if ($si >= 0) // positive or zero { $bin = base_convert($si,10,2); // pad to $bits bit $bin_length = strlen($bin); if ($bin_length < $bits) $bin = str_repeat ( "0", $bits-$bin_length).$bin; } else // negative { $si = -$si-pow(2,$bits); $bin = base_convert($si,10,2); $bin_length = strlen($bin); if ($bin_length > $bits) $bin = str_repeat ( "1", $bits-$bin_length).$bin; } return $bin; } } // binary to signed integer function bin2si($bin,$bits=32) { if (strlen($bin)==$bits) { if (substr($bin,0,1) == 0) // positive or zero { $si = base_convert($bin,2,10); } else // negative { $si = base_convert($bin,2,10); $si = -(pow(2,$bits)-$si); } return $si; } } http://php.net/manual/en/function.pack.php

« previous php.notes (#153126) next »