将代码从C++迁移到C#
问题描述:
我正在尝试编写一个C#版本的服务器。将代码从C++迁移到C#
原始客户端和服务器都是用C++编写的。
从我的C++客户端,我可以连接到新的C#服务器。但是因为我的C++客户端使用指针发送数据,所以我有一些麻烦来正确读取它。
C++客户端将Char Ptr(char * pData)发送到我的服务器。这些数据包含一个Header(通知我发送什么类型的数据,即:请求登录)和一个Body(包含实际数据,即:ID和密码)。
检查旧的服务器,我可以看到它读取数据是这样的:
DWORD *dwpMsgID;
dwpMsgID = (DWORD *)(pData + DEF_INDEX4_MSGID); // define DEF_INDEX4_MSGID 0 because its the header position
switch (*dwpMsgID)
{
...
case MSGID_REQUEST_LOGIN: doSomething(); // define MSGID_REQUEST_LOGIN 0x0DF3074F
...
}
之后,它会检查该名/密码是这样的:
cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);
memcpy(cAccountName, cp, 10);
cp += 10;
memcpy(cAccountPass, cp, 10);
cp += 10;
我的疑问是:因为我正在从C#套接字获取一个字节[],我怎么能检查标题以查看它是否与“0x0DF3074F”匹配,然后获取AccountName和Password? 我试图将该字节[]转换为字符串(使用Encoding.Unicode.GetString()或Encoding.ASCII.GetString()),但我没有成功。
提前致谢!任何帮助将受到欢迎,在这一点上! Regards
答
C++中的字符数组以'\ 0'结尾。在c#中,当向C++发送数据时必须添加结束字符,并且必须测试结束字符以确定从C++获取数据时字符数组的长度 – jdweng