【发布时间】:2014-01-25 09:56:33
【问题描述】:
我目前正在参与一个将 C++ 移植到 C# 代码的项目,但有些片段并不那么容易移植 1 到 1,如下所示:
#define CMND_MOVEL 10
#define CMND_EXTRASIDE 0x80
char CmndBuffer[32];
int *dst;
dst = (int*) &CmndBuffer[0];
*dst = 0;
*dst |= (CMND_MOVEL + (Flags << 8));
if (BoxSide) *dst |= CMND_EXTRASIDE;
dst++;
*dst = SequenceNr;
dst++;
*dst = 10 * LastDestination.x;
dst++;
*dst = 10 * LastDestination.y;
dst++;
*dst = 10 * LastDestination.z;
dst++;
*dst = Speed * 10;
dst++;
*dst = Accel * 10;
result = ERR_COMMSOCK;
if (UdpCmdSocket >= 0)
{
if (sendto(UdpCmdSocket, (const char*) CmndBuffer, 28, 0, (struct sockaddr*)&UdpCmdPeer, sizeof(UdpCmdPeer)) != SOCKET_ERROR)
{
// more logic here
}
}
有人可以详细解释一下这里发生了什么吗?我很清楚指针和位移是如何工作的,但我不能 100% 确定在字节级别上发生了什么。我看到的是它正在填充一个数据包以将其扔到 UDP 上。
但更重要的是:我如何在 C# 中发送这个? (我将使用 .NET Socket 类)
我知道这可以被视为一个懒惰的问题,但我认为 SO 可以帮助我解决这个问题。
谢谢
【问题讨论】:
-
假设速度等是浮点数,我想
Speed * 10行将保留一位十进制数字。CMND_MOVEL的值为 10 可能是为了表明这一点......或者它可能是别的东西。