|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitry E. Oboukhov 2:5020/830.100 12 Mar 2008 13:56:17 To : alexander lunyov Subject : как собрать байты в число? -------------------------------------------------------------------------------- >> Для начала надо понимать, что получить ты пытаешься не длинное число, >> которое может быть произвольной длины, а обычное. Обычное с точки >> зрения unpack бывает 8-битное (C), 16-битное (S, n или v в зависимости >> от требований к совместимости), 32-битное (L, N, V), и если повезет, >> 64-битное (оно только в native укладке). Есть еще такая хитрая штука, >> как w, но для нее число соответственно паковать надо. >> >> А вообще - perldoc perlpacktut до просветления... al> спасибо, прочитал, до просветления конечно далеко, но кое-что понял. всё al> почти работает, но есть один ньюанс - опять с pack/unpack-ом. не могу al> понять, что не так. al> есть 7-байтное поле, в котором содержится дата/время - по одному байту al> соответственно на год,месяц,день,час,минуту,секунду и долю секунды. al> имеется строка 070a12110f1002, из неё нужно получить такую же строку, но al> в десятичной системе - 07101817151602. имеется строка "070a12110f1002" или же двоичные данные 0x070a12110f1002? если второй случай, то такую строку можно получить командой: my $str=pack 'C*', 0x07, 0x0a, 0x12, 0x11, 0x0f, 0x10, 0x02; а распаковать соответственно my @chrs=unpack 'C*', $str; в массиве @chrs будут числа как ты хочешь а если случай первый, то без проверки на корректность входных данных выглядеть будет примерно так: $str="070a12110f1002"; $str=~s/(..)/sprintf "%02d", hex "0x$1"/eg; ... Терпеть не могу Умку, Броневичок и прочих мажоров. --- Mutt/1.5.17+20080114 (2008-01-14) * Origin: Debian GNU Linux (2:5020/830.100) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/44618ada5ae9.html, оценка из 5, голосов 10
|