PHP で UDP 経由でデータを受信しています。PHPでbin2hex関数を介してバッファを渡した後、Raw Data
以下の例に示すように似たものになります
ここに私のPHPコードがあります:
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, "0.0.0.0" , 20500);
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 512, 0, $from, $port);
$file = 'testudp.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new log line(s) to file
$current .= "New Connection " . date('Y-m-d H:i:s') . " \n" . bin2hex($buf) . "\n";
// Write the contents back to the file
file_put_contents($file, $current);
echo "Received connection from remote address $from and remote port $port" . PHP_EOL;
その結果、次のような結果になり83 05 01 02 03 04 05 01 01 01 02 00 01 4F B4 64 88 4F B4 64 88 13 BF 71 A8 BA 18 A5 06 00 00 1333 00 00 00 00 11 11 02 ...
ますが、スペースはありません。
データの例と変換先: 変換は最初の 9 バイトの後にのみ開始され、次にアドレス 2 が開始され、2 が再びスキップされることに注意してください。
Raw Data:
83 05 01 02 03 04 05 01 01 01 02 00 01 4F B4 64 88 4F B4 64
88 13 BF 71 A8 BA 18 A5 06 00 00 1333 00 00 00 00 11 11 02
33 44 44 55 55 66 77 88 99 10 11 ?? 00 ??
Decoded:
-------Message Header--------
01 Service Type, for this message 1 = Acknowledged Request
02 Message Type, for this message 2 = Event Report
-------Event Report----------
4FB46488 Update Time (5/17/12 @ 2:38pm)
4FB46488 Time of Fix (5/17/12 @ 2:38pm)
13BF71A8 Latitude (33.1313576)
BA18A506 Longitude (-117.2790010)
00001333 Altitude
00000000 Speed
1111 Heading
02 Satellites
33 Fix Status
4444 Carrier
5555 RSSI
66 Comm State
77 HDOP
88 Inputs
99 Unit Status
10 Event Index
11 Event Code
?? Accums (# of 4-byte Accum List values)
00 Spare
?? Accum List (Varies depending on the # of Accums reporting)
私は ascii への 16 進数のさまざまなデコーダーを試しました。また、PHP で unpack() を試しましたが、まったく役に立ちませんでした。
PHP を介してデータを例に似たものに変換するにはどうすればよいでしょうか? つまり、人間が読める形式BA18A506
に対応するデータ (フォーマットされていないかどうかに関係なく) をどのように私に与えるのでしょうか?Longitude (-117.2790010)
編集:
ドキュメントはNote that all bytes in multi-byte fields are transmitted in Net Endian format (Big Endian) where the most significant bits are transmitted first. For example, for a 32-bit field, bits 31-24 are transmitted first, 16-23 second, 8-15 third and 0-7 last
、それがまったく役立つかどうかを指定します。