я в настоящее время участвует в проекте в порт C++ в C# код, но некоторые фрагменты не так легко портировать 1 до 1, как следующее:Преобразовать C++ код (с указателями и битового сдвига) на C#
#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)
Я знаю, что это может быть понято как ленивый вопрос, но я подумал, что, возможно, это поможет мне в этом.
Благодаря
Предполагая, что скорость и т. Д. Являются величинами с плавающей точкой, я полагаю, что строки 'Speed * 10' должны сохранять одну десятичную цифру. значение «CMND_MOVEL», равное 10, может указывать на это ... или это может быть что-то другое. – melak47