我认为指针是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
}
答案 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);
这应该类似于以下内容:
sioclient->send(reinterpret_cast<unsigned char*>(mydata), sizeof(MyData));
告诉我你是否使用了不同版本的Cocos2d-x,因此这不起作用,或者它无法解决问题。当我尝试这个时,它编译得很好,似乎行为正确。
如果您的编译器不喜欢unsigned char*
参数的const unsigned char*
,只需添加const_cast
。
此外,请记住完成后delete (mydata);
。