我正在尝试将十六进制字符发送到套接字以指示新消息。此代码有效:
$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端是否正确,但服务器不接受它们作为有效字符。有关如何执行此操作的任何输入?
答案 0 :(得分:5)
尝试...send( chr($start_char) );
等(猜测get()
实际上是返回整数)。
如果它真的给你像“0B”这样的字符串,那么...send( chr(hex($start_chr)) );
答案 1 :(得分:2)
如果你有少量数据,ysth的答案是有道理的。
如果您有大量数据,可能需要查看pack
。
pack ("H*", "0B")
和pack ("C*", 0x0B)
都提供"\x0B"
。