2011-04-12 64 views
0

我试图发送一个十六进制字符到套接字来表示一条新消息。此代码的工作:通过套接字发送十六进制字符

$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

有没有这样的事情* *十六进制字符*,也没有任何要求使用字符的十六进制表示“发送”。 – mob 2011-04-12 17:56:42

+0

@mob,我会说有16个十六进制字符,但我同意他说“十六进制字符”时他只是指“字符”。 – ikegami 2011-04-12 18:23:08

回答

5

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

2

如果你有少量的数据,ysth的答案是有意义的。

如果您有更多的数据,您可能需要查看pack

pack ("H*", "0B")pack ("C*", 0x0B)都给出"\x0B"

相关问题