Отправка шестнадцатеричных символов через сокет - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь отправить шестнадцатеричный символ в сокет, чтобы указать новое сообщение. Этот код работает:

  $socket->send("\x{0B}");
  $socket->send($contents);
  $socket->send("\x{1C}");
  $socket->send("\x{0D}");

Однако, поскольку это происходит в цикле, мне нужны переменные шестнадцатеричные символы, и я не понимаю, как заставить его работать. Это то, что я пробовал.

my $start_char = get(); # returns, for example 0B
my $end_char = get(); # 1C
my $end_seg = get(); #0D

$socket->send("\x{$start_char}");
$socket->send($contents);
$socket->send("\x{$end_char}");
$socket->send("\x{$end_seg}");

Я могу проверить, что переменные, возвращаемые функцией, являются правильными на стороне perl, но сервер не принимает их как допустимые символы. Любой вклад в том, как это сделать?

Ответы [ 2 ]

5 голосов
/ 12 апреля 2011

Попробуйте ...send( chr($start_char) ); и т. Д. (Предполагая, что get() на самом деле возвращает целые числа). Если это действительно дает вам строки типа "0B", то ...send( chr(hex($start_chr)) );

2 голосов
/ 12 апреля 2011

Если у вас небольшое количество данных, ответ ysth имеет смысл.

Если у вас больше данных, вы можете посмотреть на pack.

pack ("H*", "0B") и pack ("C*", 0x0B) оба дают "\x0B".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...