我想通過 TCP 協議向第三方服務器發送命令,在他們的檔案中,他們列出了以下命令資料格式:
| 句法 | 位元組 | 價值 |
|---|---|---|
| card_id | 4 | 0x12345678 |
| 引數1 | 2 | 0 |
| 引數2 | 1 | 1 |
| 引數 3 | 1 | 0 |
| 時間 | 4 | time_t 對應于 2004-6-1 13:00:00 |
| 資料長度 | 1 | 08 |
| 資料主體 | 變數(由 data_len 確定) | “12345678” |
我想在php中使用socket_write函式來發送資料包,所以我的問題是如何轉換這些值來發送它?
首先:我將每個值轉換為十六進制,然后將它們放在一個字串變數中(每個位元組代表 2 個十六進制字符)。例如:如果值為 1 位元組,則 1 將為 01 / 如果值為 2 位元組,則 1 將為 0001
其次:我將每個值轉換為二進制(01),然后將它們放在一個字串變數中(每個位元組代表 8 位)。例如:如果值為 1 位元組,則 1 將為 00000001 / 如果值為 2 位元組,則 1 將為 00000000 000000001
請任何人都可以幫助我知道如何在 php 中表示通過 tcp 套接字發送的命令資料?我有點困惑。
uj5u.com熱心網友回復:
使用該pack()函式將多個值編碼為字串的位元組。
$packet = pack('NnCCNCa*', $card_id, $param1, $param2, $param3, $time, $data, $data);
N= 無符號 4 位元組數n= 無符號 2 位元組數C= 無符號位元組a*= 字串
4位元組和2位元組格式都是big-endian,對應網路位元組序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532382.html
