Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Путаница строк и чисел при побитовых операциях 
V
    Опции темы
SvetRus
Дата 14.9.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.6.2008

Репутация: нет
Всего: нет



Понадобилось портировать приложение с C++ в Perl. Столкнулся с неожиданной проблемой.
Код

//байтик
char a='q';
//ксорим его с маской
char a^=3;

Начал писать это в Perl'e
Код

$H=$H^6;

Отлаживаюсь - переменная ксорится не с 6, а с аскии кодом 6, т.е. с 0x36.
Порылся в мануале, нашёл функцию vXXX.YYY.ZZZ - сделал так:
Код

#некий оператор для позволяющий записать символ его кодом
my $q=v6;
#ксор
$H=$H^$q;

Вроде работает, хоть и через .... лишную переменную.
Дальше необходимо сделать побитовое И.
Код

//байтик
char a='q';
//пропускаем через маску
char a&=3;

Написал на Perl'e
Код

$n_shift&=4;

Таже проблема, операция проходит не с числом, а с символом '4'... сделал через переменную($q=v4) - стало сходиться с кодом на C++, но тут я столкнулся с проблемой - результат операции оказывается "строкой", а не числом. При попытке сравнить его в if($n_shift!=0)}else{} он всегда отправляет программу в else, хотя при распечатке лога работы(print в командную строку этой переменной) то "пустое место", символы.
Есть ли в Perl'e операторы позволяющие жестко обозначить в каком виде я хочу использовать переменную??? Или проще будет сделать Dll на С++ и её подшивать к Perl-у?
Последние часа 4 у меня ощущение, как будто я пытаюсь шурупы не закручивать шуруповёртом, а забивать им  smile 
PM MAIL   Вверх
ginnie
Дата 15.9.2008, 13:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



Уважаемый SvetRus, для Вашей задачи надо использовать функции pack() и unpack():

Код

unpack('C', pack('A', 'q') & pack('C', 6));



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
SvetRus
Дата 15.9.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.6.2008

Репутация: нет
Всего: нет



ginnie, большое спасибо, теперь буду закручивать шурупы, а не забивать!! smile 
Глянул мельком мануал - pack(), unpack() позволят решить путаницу с "типами" данных!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.