我需要与套接字的 TCP/IP 进行通信并打包一条消息,但我在打包空字符时遇到了问题。
在文档中我有这个:
PMS 必须在所有 char 变量的末尾添加 NULL char。因此,上面的 char [20] 声明(或 char [0..19] 的等效 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
斯特伦 62
十六进制转储 PHP = 55555555aaaaaaaa0100010000002c000000343434333634313200000000000000000000000000000000000000546573745f50726f6772616d00000000000000000000000
C++:
我正在将一个 c++ 应用程序重写为 PHP,我有一个 hexdump 的消息需要发送到 c++ hexdump c++ 中的服务器: 55555555aaaaaaaa0100010000002c000000343434333634313200cdcdcdcdcdcdcdcdcdcdcd546573745f50726cdcdcdcdf677261000000cdcd
比较 hexdump 直到 pack('V', 44):
- PHP: 5555555aaaaaaaa0100010000002c000000
- C++: *55555555aaaaaaaa0100010000002c000000
比较 hexdumps 直到 pack('a20', "44436412"):
- PHP: 55555555aaaaaaaa0100010000002c000000343434333634313200000000000000000000000
- C++:55555555aaaaaaaa0100010000002c000000343434333634313200cdcdcdcdcdcdcdcdcdcdcd
就像我们可以看到我在文档中询问的那样添加的 pack null char,在 php 中与在 c++ 中不同。
我需要做什么才能给相同的包 null char?