![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| failed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2011 Репутация: нет Всего: нет |
Здравствуйте!
Моему скрипту (модуль для фрирадиуса) передается некторое значение, которое должно по идее выглядеть так:
Мне необходимо получить отдельно три последних значения. Исходными данные по идее должны быть: 00 04 03E8 01 04 Скрипту значение передается, однако вот тут я не совсем могу понять. Судя по всему перл как-то сразу переделывает его в строку, потому что если вывести его на экран получается "\000\004\003\350\001\004" , причем это и есть строка судя по тому, что у нее length возвращает 24, и ее спокойно можно разбить сплитом по "\". Отсюда вопрос - исходные данные уже "испорчены", и их нужно парсить вручную как строку, или это перл воспринимая содержимое октетов как строку, занимается подменой нелегальных символов на их восьмеричное представление? Спасибо! |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
$ echo -ne "\05" | perl -ne "warn '[', $_, '] ', length, ' ', ord, ' ', unpack('C')"
[] 1 5 5 at -e line 1, <> line 1. Если приходит набор байтов, он и остаётся набором байтов, perl ничего с ней сам не делает. |
|||
|
||||
| failed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2011 Репутация: нет Всего: нет |
Спасибо за ответ, действительно мне приходит уже готовая строка вида '\000\004\003\350\001'...
Причем в случае совпадения октета с реальным кодом символа, печатается сам символ, что в принципе мне и надо, поэтому я недолго думая сделал так:
И все было хорошо, пока мне не попалась вот такая штука: "\000\004\003\350\001\n" которая снова испортила мне всю малину... Понятно, что \n = 10, сделал "второй проход" на замену служебных символов, но что-то мне всеравно неспокойно, вдруг есть какой-нибудь \+100500 одному перлу известный, или еще какой нюанс вылезет. Нельзя ли как-нибудь стандартными методами преобразовать все "развернутые" \xxx и служебные символы (вроде \n) в строке в их родное значение? Спасибо! |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Оттолкнуться можно от того, что escape последовательности интерполируются в двойных кавычках. С помощью eval есть возможность получить нужное значение, но это как известно не очень хорошо с точки зрения безопасности. С другой стороны простой регуляркой можно отфильтровать опасные данные.
Кажется такая конструкция должна работать:
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc -f pack
perldoc -f unpack |
|||
|
||||
| failed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2011 Репутация: нет Всего: нет |
Спасибо, подобный подход сработал на ура!
Я про них думал, но, к сожалению, не смог найти способ преобразовать escape последовательность в ее код анпаком. Буду благодарен, если вы приведете подобный пример! |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
... и ник у вас подходящий.
CCSCC |
|||
|
||||
| failed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2011 Репутация: нет Всего: нет |
Аа, вы об этом. Спасибо, но ваше решение совершенно не от моих вопросов. Ну, тоесть, я так и делаю, но уже после всех действий о которых шла речь в этой теме. Боюсь вы просто не вчитались в суть первого поста и последующего уточнения. А ник да, мне подходит |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
как знаете.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |