bit strings

From: Date: Tue, 18 Dec 2001 12:19:22 +0000
Subject: bit strings
Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-435@lists.php.net to get a copy of this message
hello, I need to work with long bit 'strings' in order to store data. I thougth of using 'int' to save that, but int was to small, so I started using strings. Now I have created some functions to generate, modify and search binary data in strings, and they work good enough for me (after generating data, I store it in a text field in mySQL); but I amb sure they can be better and faster, so any comment is wellcome. function bittest($cadena,$bit) { $resposta=0; $caracter=intval($bit/8); if ($caracter< strlen($cadena)) { $caracter=substr($cadena,$caracter,1); $caracter=ord($caracter); $bit=round((($bit/8)-(intval($bit/8)))*8); $caracter=decbin($caracter); while (strlen($caracter)<8) { $caracter="0".$caracter; } $resposta=substr($caracter,((8-1)-$bit),1); } return $resposta; } function bitlength($cadena) { if($cadena=="") return 0; else { $resposta=(strlen($cadena)-1)*8; $final=substr($cadena,-1,1); $resta=strlen(decbin(ord($final))); return $resposta+$resta; } } function bitset($cadena,$bit) { $and=round((($bit/8)-(intval($bit/8)))*8); $and=chr(1 << $and); $car_afe=(intval($bit/8)); while (strlen($cadena2)<$car_afe) { $cadena2=$cadena2.chr(0); } $cadena2=$cadena2.$and; $resposta=($cadena|$cadena2); return $resposta; } function bitunset($cadena,$bit) { $and=round((($bit/8)-(intval($bit/8)))*8); $and=~(chr((1 << $and))); $car_afe=(intval($bit/8)); while (strlen($cadena2)<$car_afe) { $cadena2=$cadena2.(chr(bindec('11111111'))); } $cadena2=$cadena2.$and; $resposta=(($cadena2) & ($cadena)); $final=substr($cadena,(intval($bit/8)+1)); $resposta=$resposta.$final; $resposta=rtrim($resposta); return $resposta; }

« previous php.smarty.dev (#435) next »