[英]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.