2013-01-14 100 views
3

我想通過一個PHP套接字發送數據的二進制表示。如何通過PHP套接字發送二進制表示?

因此,如果數量爲15,socket_write就送00001111的二進制表示的15

我應該怎麼辦呢?

+0

令人驚歎的是,在界面層,它以二進制方式發送!無需轉換。 :D – vanneto

+0

@vanneto如果你使用'socket_write($ fp,15)',它將和'socket_write($ fp,「15」)',I.E.發送字節'0x31 0x35',而據我所見,他想發送一個字節'0x0F' – Esailija

+0

是的,抱歉讓人困惑。我想發送數據的單字節表示。我在做socket_write($ sock,15),它發送了兩個字節,這讓我感到困惑。 –

回答

4

使用chr功能:

socket_write($fp, chr(15)); 

您還可以使用\x轉義十六進制值:

socket_write($fp, "\xff\xff\xff\xff"); 

會在每次發送4個字節,其值255。

2

要從任意數據生成二進制表示,請使用pack()函數。

實施例:

$data = pack("v", 15); // "i" is unsigned little endian integer 
socket_write($socket, $data); 

對各種格式的詳細信息,請參見手冊頁。反向功能也有unpack()

+0

這會發送'0x0F 0x00',你希望''C「'發送'0x0F' – Esailija

+0

嗯,這是一個無符號小端16位整數的正確二進制表示。另外'C'對數字> 255無效。 – Koraktor