网络通信中,DELPHI的string类型数据转换为C++字符串发送的一个陷阱

    技术2022-05-19  19

    因为项目需要,把某个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封包的内容一致。

     

     


    最新回复(0)