Двоичное представление символов 1 и 0

BigZ

Guest
Двоичное представление символов 1 и 0

Проблема.

Я знаю как записать шестнадцетиричное значение нуля или единицы: \x0, \x1; знаю как записать восьмеричное; но как записать в файл/переменную один бит??? Пробывал TRUE/FALSE, NULL, ноль вроде как-то получилось записывать, а единица все равно записывается как \x31. Подскажите как можно работать с битами?

Конечно я понимаю, что можно просто накопить четыре бита и записать в виде \xXXXX, однако все равно хочется узнать, возможно ли такое?

вот код:

$f = fopen ( 'encode.bin', 'wb' );
for ( $i = strlen ( $encode ) - 1; $i > 0; $i-- )
{
if ( $encode[$i] == '1' ) $encode_bin[$i] = ?;
else $encode_bin[$i] = ?;
}
fclose ( $f );

Не смотрите на оформелние цикла, это я для разнообразия :)). Вопросительный знак - это значит нужно подставить логический ноль или единицу. $encode - строка, с набором символов нулей и единиц.


Спасибо.
 

white phoenix

Новичок
Нет, все файлы должны иметь определенный, целый размер в байтах. Можно записать 1 байт который будет нести один бит TRUE и остальные FALSE.
 

BigZ

Guest
ясно, значит только копить :), в принципе я так и понял сразу

-~{}~ 27.10.05 23:21:

white phoenix, алгоритм Хоффмана подразумевает уменьшение исходного размера, а если записывать один бит как байт... :)
 

Demiurg

Guest
BigZ
ты не поверишь но физически на диске даже файл размером один байт будет занимать куда больше места, чем один байт.
 

SiMM

Новичок
> white phoenix, алгоритм Хоффмана подразумевает уменьшение исходного размера, а если записывать один бит как байт...
Писать Хаффмана на PHP - всё же извращение :) Разве что баловства ради, т.е. для понимания алгоритма и из-за простоты инструмента.
PS: кстати было такое предчувствие ;)
 

Navarro

Новичок
Записать 1 бит- никак.
Но если тебя интересует именно 1бит, тогда можно попробовать проверку на существование файла.
Файл есть- 1, нет- 0
 

BigZ

Guest
SiMM

Извращение, но времени на С писать нет =)), а лабу сдать нужно. В принципе в бинарнике записывать не требуется, это я для интереса. Теперь проблема раскодирования, записи таблицы ключей, и прочее, ведь в двоичном виде все не так просто, как было бы в текстовом.
 

SiMM

Новичок
> Теперь проблема раскодирования, записи таблицы ключей, и прочее, ведь в двоичном виде все не так просто, как было бы в текстовом.
Не намного сложнее. Будет проще, если ты сделаешь класс для работы с битовым потоком.
Кстати, деревья удобно представлять в виде длин кодов, собирая сам код при помощи алгоритма Шеннона-Фано (почитать про то, как собирать код Шеннона-Фано по таблице длин кодов можно в разделе VIII. Imploding - Method 6 в .ZIP File Format Specification)
 
Сверху