在套接字上发送十六进制字符

时间:2011-04-12 17:07:17

标签: perl sockets

我正在尝试将十六进制字符发送到套接字以指示新消息。此代码有效:

  $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 个答案:

答案 0 :(得分:5)

尝试...send( chr($start_char) );等(猜测get()实际上是返回整数)。 如果它真的给你像“0B”这样的字符串,那么...send( chr(hex($start_chr)) );

答案 1 :(得分:2)

如果你有少量数据,ysth的答案是有道理的。

如果您有大量数据,可能需要查看pack

pack ("H*", "0B")pack ("C*", 0x0B)都提供"\x0B"

相关问题