gpt4 book ai didi

c# - 将代码从 C++ 迁移到 C#

转载 作者:行者123 更新时间:2023-11-28 05:41:47 25 4
gpt4 key购买 nike

我正在尝试编写服务器的 C# 版本。

原始客户端和服务器都是用 C++ 编写的。

从我的 C++ 客户端,我可以连接到新的 C# 服务器。但是由于我的 C++ 客户端使用指针发送数据,我在正确读取数据时遇到了一些麻烦。

C++ 客户端向我的服务器发送一个 Char Ptr (char *pData)。此数据包含一个 header (告知我要发送的数据类型,即:请求登录)和一个正文(包含实际数据,即: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# 套接字中获取了一个 byte[],我如何检查该 header 以查看它是否与“0x0DF3074F”匹配,然后获取帐户名和密码?我尝试将该 byte[] 转换为字符串(使用 Encoding.Unicode.GetString() 或 Encoding.ASCII.GetString())但没有成功。

提前致谢!此时欢迎任何帮助!问候

最佳答案

您的问题不在于使用指针发送数据,而是您发送的是二进制数据。您的 C# 服务器需要将 4 个字节转换为数字。

您可以使用 BitConverter.ToInt32为此。

您已经知道如何处理有效负载的字符串部分。

关于c# - 将代码从 C++ 迁移到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com