这是关于通过套接字发送到驻留在远程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应用程序以正确的格式解释。
答案 0 :(得分:0)
通过网络套接字发送二进制数据也可能会产生字节排序(Endianness)的麻烦,您可能想知道两个系统上的字节顺序是否相同。 http://en.wikipedia.org/wiki/Endianness
答案 1 :(得分:0)
您构建$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);