2011-04-12 126 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"

相關問題