如何转换数据结构以在c ++中转换char *

时间:2017-12-16 06:05:08

标签: c++ networking

我认为指针是4Byte或(2Byte)堆内存分配

我需要将Structure数据转换为char *只需要12byte转换

这是我的代码

请联系我。

谢谢

   struct MyData {
        unsigned int myNumber;
        float x;
        float y;
    };


int main(){
  Mydata* mydata = new Mydata();
  mydata->userNumber = 188242268;
  mydata->x = 100.0f;
  mydata->y = 102.0f;

  char* sender = (char*)&mydata;



   sioclient->send(sender);
   // SocketIO Server Send
}

1 个答案:

答案 0 :(得分:0)

我不认为你问的是可能的。 string不喜欢本身有null个字符,这对于直接发送数据是必要的(例如,int(1)将有1个NULL(0x0)字符(现代系统会有3个NULL字符)和1个0x1字符,string不喜欢null并在那里终止字符串)。

如果您不能使用WebSocket并且需要具有发送结构字节的效率,我认为您应该找到另一个网络库。 (Boost :: asio也许?)

但是如果你必须在没有WebSocket的情况下使用Cocos2d-x SIOClient,那么在发送方面,创建一个字符串,其值以逗号分隔:

string sendMe = to_string(mydata->userNumber) + "," + to_string(mydata->x) + "," + to_string(mydata->y);

然后在接收方:

Mydata receiver;
string recStr;//Received string
string temp;
int stage = 0;
for (int itr = 0; itr < temp.length(); itr++)
{
    if (recStr[itr] == ',')
    {
        if (stage==0)
           receiver.myNumber = stoi(temp);
        else if (stage==1)
           receiver.x = stof(temp);

        stage++;
        temp = "";
    }
    else
        temp += recStr[itr];

}
receiver.y = stof(temp);

希望有所帮助。

旧答案,以防您想要切换并提供解决方案:

好的,请尝试使用重载功能

void send (const unsigned char * binaryMsg, unsigned int len);  

代替。 read about it here

这应该类似于以下内容:

sioclient->send(reinterpret_cast<unsigned char*>(mydata), sizeof(MyData));

告诉我你是否使用了不同版本的Cocos2d-x,因此这不起作用,或者它无法解决问题。当我尝试这个时,它编译得很好,似乎行为正确。

如果您的编译器不喜欢unsigned char*参数的const unsigned char*,只需添加const_cast

此外,请记住完成后delete (mydata);