Entry tags:
красивые грабли, с ручкой, украшенной лепниной (C) dma
Задача: прочитанные их файла байтики разобрать на отдельные биты. На перле.
Пишем простенькую тестовую программу:
Получаем ожидаемое 0 1 0 0 0 1 1 1.
Поскольку байтиков ожидается больше одного, усложняем пример. Разбираем буфер на отдельные байты в массив:
проверяем, что получилось:
(даёт 0x47, как и ожидалось)
и повторяем процедуру извлечения битов:
и.. получаем другой результат: 0 0 1 1 0 1 1 1
Долго бьёмся головой об стену в тщетных попытках понять, почему три бита из восьми инвертировались.
работает, если vec() применять к chr($a[0])или если unpack делать с A*
Спасибо
dma, а то бы я голову разбил.
Пишем простенькую тестовую программу:
#!/usr/bin/perl -w
my $foo = "\x47";
for(my $i=7;$i>=0;$i--){
print vec($foo, $i, 1)." ";
}
print "\n";Получаем ожидаемое 0 1 0 0 0 1 1 1.
Поскольку байтиков ожидается больше одного, усложняем пример. Разбираем буфер на отдельные байты в массив:
my @a = unpack("C*", $foo);проверяем, что получилось:
printf("0x%x\n", $a[0]);(даёт 0x47, как и ожидалось)
и повторяем процедуру извлечения битов:
for(my $i=7;$i>=0;$i--){
print vec($a[0], $i, 1)." ";
}
print "\n";и.. получаем другой результат: 0 0 1 1 0 1 1 1
Долго бьёмся головой об стену в тщетных попытках понять, почему три бита из восьми инвертировались.
работает, если vec() применять к chr($a[0])
Спасибо

no subject
no subject
no subject
no subject
Меня в свое время в перле глубоко впечатлил тот факт, что
foo(bar("baz"))иmy $x = bar("baz"); foo($x)-- разные вещи, и от замены второго на первое программа вполне может сломаться. Головой об стенку не бился, но впечатление было сильным.no subject
no subject
no subject