2013-07-16 70 views
0

我有以下代碼:如何在PHP中使用套接字發送和接收十六進制?

$send1 = 0x01; 
$send2 = 0x03; 
$send3 = 0x00; 
$send4 = 0x00; 

,我把它像這樣:

socket_write($spawn, $send1, strlen ($send1)) or die("Could not write output\n"); 
socket_write($spawn, $send2, strlen ($send2)) or die("Could not write output\n"); 
socket_write($spawn, $send3, strlen ($send3)) or die("Could not write output\n"); 
socket_write($spawn, $send4, strlen ($send4)) or die("Could not write output\n"); 

接收方得到這樣的:

$result = socket_read ($socket, 1024) or die("Could not read server response\n"); 
    echo "Reply From Server :".$result; 

和接收的數據是: 1300,如何在PHP中使用套接字發送和接收十六進制?

回答

0

PHP沒有內置的十六進制的數據類型,所以當你這樣做:

$send1 = 0x01; 

這被視爲由PHP的整數。 (嘗試的var_dump(0×01),你會得到INT(1)) 所以,你可以發送數據作爲字符串和處理它在接收端,像這樣:

$send1 = "0x01"; 
$send1 = "0x02"; 
$send1 = "0x03"; 
$send1 = "0x04"; 

,或者你可以把整數值過插座,然後將它們轉換成十六進制值進行處理,在接收端:

$send1 = 1; 
$send2 = 2; 
$send3 = 3; 
$send4 = 4; 

在接收端:

var_dump(dec2hex($result)); 

(在時間,從而y處理一個輸入你可以將它們分開)。

+0

但是$ send2 =「0xCD」怎麼樣,如何接收並將其轉換爲十六進制?第二次想到了 – user2131316

+0

,我意識到代碼是以十六進制發送值開始的。所以var_dump(0x01)給出int(1) 和var_dump(0xcd)給出int(205)。你可能想嘗試發送像這樣的東西:$ send1 = 0xcd; (只有一個值),看看你在接收端得到了什麼。如果您確實在接收端獲得了十六進制值,那麼您只需在每個十六進制值之後添加一個分隔符(例如|,例如),然後將該分隔符的接收端的十六進制輸入拆分爲進一步處理。我希望這一切都有道理。 – Maximus2012

相關問題