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


Автор: Igor_K 15.8.2009, 18:29
Здравствуйте!

Как записать в двоичный файл нужные мне данные? Например, не используя функцию pack
Есть число большое, не 32 бита, pack не подходит для этого. Как быть?  Например в Си с этим все просто.

И еще строки. Например 10 строк разной длины. Как их записать в двоичном виде? Я что-то не пойму ничего.
Код

$num = array
(
    127,
    23457,
    9843434,
    8,
    1243,
    32423567,
    4294967295,
    6346346
);
$f = fopen('file', 'wb');
foreach ($num as $v)
    fwrite($f, $v, 4);
fclose($f);

Так не работает, записует как текст и считать правильно числа нельзя

Код

$f = fopen('file', 'wb');
foreach ($num as $v)
    $str .= pack("V", $v);
fwrite($f, $str);
fclose($f);

Так работает, но если число больше 4 байт, то нет

Автор: nerezus 15.8.2009, 22:51
отладка.

Автор: youri 15.8.2009, 23:22
а в каком виде данные, которые надо записать и откуда они беруться?

Автор: Igor_K 16.8.2009, 12:28
Цитата(youri @  15.8.2009,  23:22 Найти цитируемый пост)
а в каком виде данные, которые надо записать и откуда они беруться?

Из базы данных, файлов. Обычные числа и строки. Числа надо записывать 8 байтные.

Да и вообще интересует можно ли обойтись без функции  pack()

Автор: Ипатьев 16.8.2009, 15:10
С помощью практически любого языка программирования можно обойтись без готовых функций.
Для этого надо всего лишь представлять себе конечный результат.

Автор: Igor_K 16.8.2009, 15:49
Ипатьев, 
хорошо. Файл, первые 32 байт - 4 8байтные числа. Как их туда записать? От весь конечный результатат который мне нужен smile 

Автор: Ипатьев 16.8.2009, 15:54
Нет. Это не называется "конечный результат". 
Конечный результат - это значение каждого байта, которое мы хотим получить. После этого уже можно начинать думать - как его получить.

Автор: youri 16.8.2009, 16:39
Цитата(Igor_K @  15.8.2009,  18:29 Найти цитируемый пост)
но если число больше 4 байт

Igor_K, а ты сделай var_dump этого числа

а что это за информация и зачем ее в бинарном виде в файл записывать?

Автор: unicross 16.8.2009, 17:05
Igor_K, функции serialize() и unserialize() не подойдут?
Код

<?php
$num = array
(
    127,
    23457,
    9843434,
    8,
    1243,
    32423567,
    4294967295,
    6346346
);
$str = serialize($num);
$f = fopen('file.txt', 'w');
fwrite($f, $str);
fclose($f);
print_r(unserialize(file_get_contents('file.txt')));
?>

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