簡體   English   中英

PHP Pack二進制數據

[英]PHP pack binary data

這是關於通過套接字發送到遠程POS系統上的C應用程序的數據。

二進制數據是從php應用程序發送的,在C app數據包結構中,為字符串(例如產品名稱)存儲了64個字節。

現在,當我通過php套接字通過網絡發送產品名稱時,我使用pack將數據轉換為二進制

$value = 'product name' 
$qty = 2;
$len = strlen($value);
$output = '';
for($i=0; $i<$len; $i++) {
        $output .= pack('c', ord(substr($value, $i, 1))).pack('c',$qty) 
}

當C應用程序接收到數據時,字符串包含大量垃圾數據,包括數字和特殊字符。

我必須使用哪個打包選項將產品名稱打包為64字節的二進制字符串,C應用程序將以正確的格式對其進行解釋。

通過網絡套接字發送二進制數據也可能會導致字節順序(Endianess)出現問題,您可能想檢查一下兩個系統上的字節順序是否相同。 http://en.wikipedia.org/wiki/Endianness

構建$output循環將生成一個字符串,例如"p\\x02r\\x02o\\x02d\\x02u\\x02c\\x02t\\x02 \\x02n\\x02a\\x02m\\x02e\\x02"

如果您的C程序期望使用類似於"product name\\0\\x02" ,則循環應為:

$output = '';
for($i=0; $i<$len; $i++) {
        $output .= pack('c', ord(substr($value, $i, 1))); 
}
$output .= pack('c',0).pack('c',$qty);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM