我认为指针是分配的 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);
。