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



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

我需要结构数据转换为字符* 只需要 12 字节转换

这是我的代码

请与我联系。

谢谢

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
}

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

我认为如果您不能使用WebSocket并且需要具有发送结构字节的效率,您应该为您正在做的事情找到另一个网络库。(助推::也许是阿西奥?

但是,如果您必须在没有 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);  

相反,请在此处阅读有关它的信息

这应该如下所示:

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

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

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

另外,请记住在完成它时delete (mydata);

最新更新