我需要与socket的TCP / IP进行通信并打包消息,但是我在打包空字符时遇到问题。
在文档中我有这个:
PMS必须在所有char变量的末尾添加NULL char。因此,上面的char [20]声明(或等效的[0..19] char的Delphi声明)实际上意味着19个可用字符加上1个空格用于NULL。
这是我的PHP代码:
$message = pack('N', 1431655765) //HEADER - uint32 ui32Synch1
. pack('N', 2863311530) //HEADER - uint32 ui32Synch1
. pack('v', 1) //HEADER - uint16 ui16Version
. pack('V', 1) //HEADER - uint32 ui32Cmd;
. pack('V', 44) //HEADER - uint32 ui32BodySize
. pack('a20', "44436412") //BODY - char szLisence[20]
. pack('a20', "Test_Program") //BODY - char szApplName[20]
. pack('I', 0); //BODY - int nRet
echo "<br/> Message - packed = " . $message . "<br/> strlen " . strlen($message);
echo "<br/> Hex dump PHP = " . bin2hex($message);
输出:
消息 - 打包=UUUUªªªª,44436412Test_Program
strlen 62
Hex dump PHP = 55555555aaaaaaaa0100010000002c0000003434343336343132000000000000000000000000546573745f50726f6772616d000000000000000000000000
C ++:
我正在将一个c ++应用程序改写为PHP,我有一个需要在c ++中发送到服务器的消息的hexdump hexdump c ++: 55555555aaaaaaaa0100010000002c000000343434333634313200cdcdcdcdcdcdcdcdcdcdcd546573745f50726f6772616d00cdcdcdcdcdcdcd00000000
比较hexdumps直到打包('V',44):
比较hexdumps直到打包('a20',“44436412”):
就像我们可以看到pack null char我在文档中添加了问题,在php中与c ++不同。
我需要做些什么来为同一个包提供null char?
答案 0 :(得分:0)
在测试了最近版本的相同c ++应用程序后,我检查了wireshark,发送给服务器的消息没有&#34; cdcdcdcd ......&#34;当null char时,已经有&#34; 00000000&#34;像PHP一样,所以我唯一需要做的就是这样打包:
pack('a20', "44436412");
答案 1 :(得分:0)