C# C++中字节数组到对象C+++C Bitconverter的转换 我有一个C++服务器,从C中使用C SFL UDP套接字接收客户端的字节数组。在客户端,我使用System.Bitconverter对数据包信息进行编码 我如何从C++服务器上的包中提取信息,因为它是作为字符串/ char []接收的。使用C中的Bitconverter,我可以只执行Bitconverter.GetBytes 我的C++不太好,所以我就这个问题道歉。任何帮助都将不胜感激!提前谢谢

C# C++中字节数组到对象C+++C Bitconverter的转换 我有一个C++服务器,从C中使用C SFL UDP套接字接收客户端的字节数组。在客户端,我使用System.Bitconverter对数据包信息进行编码 我如何从C++服务器上的包中提取信息,因为它是作为字符串/ char []接收的。使用C中的Bitconverter,我可以只执行Bitconverter.GetBytes 我的C++不太好,所以我就这个问题道歉。任何帮助都将不胜感激!提前谢谢,c#,c++,udp,byte,bitconverter,C#,C++,Udp,Byte,Bitconverter,为Unity游戏引擎编写的客户端: // - Sending this Player's data: - byte[] buff = new byte[7 * sizeof(float) + 3 * sizeof (int)]; int tag = 1; int curSize = 0; Buffer.BlockCopy(BitConverter.GetBytes(tag), 0, buff, curSize, sizeof (int)); curS

为Unity游戏引擎编写的客户端:

// - Sending this Player's data: -

    byte[] buff = new byte[7 * sizeof(float) + 3 * sizeof (int)];

    int tag = 1;
    int curSize = 0;

    Buffer.BlockCopy(BitConverter.GetBytes(tag), 0, buff, curSize, sizeof (int));
    curSize += sizeof(int);
    Buffer.BlockCopy(BitConverter.GetBytes(id), 0, buff, curSize, sizeof(int));
    curSize += sizeof(int);
    Buffer.BlockCopy(BitConverter.GetBytes(GetComponent<controls>().killedID), 0, buff, curSize, sizeof(int));
    curSize += sizeof(int);


    Buffer.BlockCopy(BitConverter.GetBytes(transform.position.x), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);
    Buffer.BlockCopy(BitConverter.GetBytes(transform.position.y), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);
    Buffer.BlockCopy(BitConverter.GetBytes(transform.position.z), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);

    Buffer.BlockCopy(BitConverter.GetBytes(transform.eulerAngles.x), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);
    Buffer.BlockCopy(BitConverter.GetBytes(GetComponentInChildren<Camera> ().transform.eulerAngles.y), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);
    Buffer.BlockCopy(BitConverter.GetBytes(transform.eulerAngles.z), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);
    Buffer.BlockCopy(BitConverter.GetBytes(myGun.transform.eulerAngles.x), 0, buff, curSize, sizeof(float));
    curSize += sizeof(float);


    sendData(buff);

}
private void sendData(byte[] data)
{
    udp.Send(data, data.Length);
}

假设你的C++和C编译器对int和浮点的大小和形状达成一致,并且你的客户机/服务器有匹配的字节数,你可以做如下:

struct packet {
  int tag, id, killedID;
  float posX, posY, posZ;
  float rotX, rotY, rotZ;
  float rotGun;
};

packet read_packet(const char *in) {
    packet ret;
    ret.tag = *(int *)in; in += sizeof int;
    ret.int = *(int *)in; in += sizeof int;
    ret.posX = *(float *)in; in += sizeof float;
    ...
    return ret;
}

但是,我建议使用。这使您可以对包内容有一个单独的说明,并有工具来为您生成序列化代码。

< P>这是一个C++头文件库,这可能会有帮助。它是C++的BitConverter类的一个端口。