Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > pack & unpack


Автор: Dr.Death 5.6.2004, 17:23
Решил я хранить данные в бинарном файле, пробовал для начала просто перевести строку в байтовое представление посимвольно с помощью фнукции ord и записать в файл. Записал, но файл так и остался текстовым(windows). Нашел я функцию pack и с помощью нее перевел мое байтовое представление строки с помощью нее в файл. Ура, получилось, файл и вправду стал бинарный, аля exe. И решил я прочитать этот файл и получить обратно строку с помощью unpack, а не получается, вот весь код:
Код

<?
string = "Hello";
$string = strtobin($string);
$string = pack("ix",$string);//получаем бинарное значение
/* Закомментировано, потому что файл уже получил бинарный
$f = fopen("test.bin","w");
fwrite($f,strlen($string).$string);
fclose($f);
*/
$f   = fopen("test.bin","rb");//пробуем извлечь
$cnt = fread($f,1);
$str = fread($f,$cnt);
$x = unpack("c",$str);
foreach($x as $key=>$value) echo $value;//должно посимвольно вывестись hello
fclose($f);
function bintostr($string)
{
for($i = 0;$i <= $string;$I++)
{
$chr = chr($string[$i]);
$str.=$chr;
}
return $str;
}
function strtobin($string)
{
for($i = 0;$i <=strlen($string);$i++)
{
 $byte = ord($string[$i]);
 $result.=$byte;
}
return $result;
}
?>

И вот проблема, обратно мне Hello не выводится.
Если кто знает способ быстрее и с меньшими усилиями, выкладывайте

Автор: Chuck 14.6.2004, 22:16
А почему бы serialize() не использовать???
Потому что параметры не задал для unpack...

Автор: Secandr 15.6.2004, 18:22
Код
<?
$s="437829508";
$b=pack('i',$s);
print "pack:$b<br>";
$s=unpack('i',$b);

print join('',$s);

?>

Это пакуются числа.

Кстати, запаковать буквы нельзя, даже в exe файлах строки остаются без изменений.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)