|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Yuriy Kaminskiy 2:5020/517.21 09 Jul 2002 03:04:40 To : Artem Chuprina Subject : Re: unpack --------------------------------------------------------------------------------
>>>>> On 16:16 08/7/2002, Artem Chuprina wrote to Artur Komarov:
AK>> Есть кусок: while (read(DAT, $buff, 5)) {
AK>> ($data[3], $data[2], $data[1], $data[0], $proto{"socks5"},
AK>> $proto{"sock4"}, $proto{"http80"}, $proto{"http8080"},
AK>> $proto{"http3128"})=unpack
AC> В чтении документации по диагонали. Все идущие подряд b пакуют
AC> одну строку, и в одну же, соответственно, распаковывают.
1. Это неправда. В одну и ту же строку пакуют b5 или b*. "bbbbb"
распаковываются в _пять_ строк. Проблема только в том, что это биты из
пяти _младших_ битов _разных_ байтов. Т.е. - второй b - из младшего
бита 6-го байта (которого нет), третий - седьмого, и т.д. В результате
в $proto{sock4}...proto{http3128} будет undef.
2. Из документации это отнюдь не очевидно.
3. Это только половина проблемы. Кто сказал, что read(DAT,$buff,5)
прочитает именно пять байт? [если DAT - это файл на диске,
это не актуально, AFAIK; но и тогда подстраховаться не мешает]
--
Yuriy Kaminskiy.
--- Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley)
* Origin: Code is language! http://www.anti-dmca.org (2:5020/517.21@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/174276c84c7b9.html, оценка из 5, голосов 10
|