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

问题描述 投票:-1回答:1

我认为指针是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
}
c++ networking
1个回答
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);

© www.soinside.com 2019 - 2024. All rights reserved.