0

在 C++ 中,我有这样的数据结构:

struct Data 
{ 
int N; 
double R; 
char Name[20];
};

我必须将这些数据从客户端发送到不同系统上的服务器(我必须发送一组数据结构,但我可以一个一个地发送它)。我想将它作为二进制数据发送,以便我可以在另一端提取数据并将其放入相同的结构类型中。

如果(客户端和服务器)都使用相同的编译器编译,则 sizeof(Data) 和结构中的所有位填充将是相同的。但是由于服务器是运行 Linux 的 64 位,而客户端甚至可以是 32 位窗口,因此 Data 中数据的顺序可能会有所不同。

我对吗?处理这个问题的最佳方法是什么?

4

3 回答 3

5

假设所有客户端和服务器将始终使用相同的编译器构建相同的架构和操作系统,这几乎总是一个坏主意。最好编写代码,将结构的成员显式打包和解包为具有指定顺序的字节流,或者将数据转换为可以在另一端解析的非二进制格式(例如 JSON 或 XML)。

于 2012-08-29T09:36:26.540 回答
3

您可以使用Boost.Serialization来编组/解组(即将您的数据从源计算机格式转换为适合传输的格式,然后从该格式转换为目标计算机使用的格式)您的数据和Boost.Asio来处理通信.

于 2012-08-29T09:41:39.113 回答
0

正确的协议定义将帮助您解决此问题。有一个固定长度的标头,后跟可变长度的数据。

像这样的东西

标头***

[数据大小] - 2 个字节

[MSG ID] - 1 个字节

**

[N] - 4 个字节

[R] - 8 个字节

[Len] - 2 个字节

[名称] - Len 字节

读取字节并填充结构

于 2012-08-29T09:44:03.190 回答