我正在编写一个具有网络功能的跨平台游戏(使用SFML和RakNet),并且我已经到达了在我的Ubuntu服务器上编译服务器并获得客户端在我的Mac上。所有的开发都是在我的Mac上完成的,所以我最初一直在测试服务器,并且它工作正常。在C++中创建和使用跨平台结构
我通过网络发送struct
s,然后简单地将它们从char *
转换回(例如)inet::PlayerAdded
。现在这一直工作正常(大部分),但我的问题是:这会一直工作吗?这似乎是一个非常脆弱的方法。例如,结构的布局是否总是与其他平台,Windows相同?你会推荐什么?如果(除其他事项外),试图从little-endian的机器做它大端机作为正确int
表示将两者颠倒
#pragma pack(push, 1)
struct Player
{
int dir[2];
int left;
float depth;
float elevation;
float velocity[2];
char character[50];
char username[50];
};
// I have been added to the game and my ID is back
struct PlayerAdded: Packet
{
id_type id;
Player player;
};
#pragma pack(pop)
对于序列downvoter,有什么特别的原因? (史蒂夫的downvote看起来特别糟糕) – KevinDTimm 2010-11-18 16:38:01
在这样的地方,积分毫无意义。我不会为此担心。 – 2010-11-18 17:18:07
我不在乎分,我想知道为什么每个答案(除了一个,所有的最不有用)得到一个downvote。尤其是当其中一个(低估的)答案显然是最好的时候。 – KevinDTimm 2010-11-18 20:37:06