因为项目需要,把某个DELPHI写的通信协议专用C++编写发送,
结果登录时服务器总是提示C++发送的用户名密码有错误
delphi中的协议字段userpwd类型为string[20];
刚开始c++的定义为char userpwd[21];
现在加设userpwd的内容为“abcd”
那么C++代码strcpy(c.userpwd, "abcd"); 这样发送,服务器解析密码错误
后来又跟踪了DELPHI的代码,
发现原来delphi的string类型第一个字节表示字符串的长度,
delphi的d.userpwd[0] = $04;(“abcd”长度为4)
所以d.Userpwd字符串从0位置开始的的内容为$4+'abcd'
而c++则也'/0’表示字符串的结束.
因此上面的代码应该对应修改为
strcpy(c.userpwd + 1, "abcd");
c.userpwd[0]= 0x04;
这样发送的内容才能与DELPHI封包的内容一致。