在此之前,我想说标题不是问题。
我的问题是为什么你不能只发送结构的所有字节,然后将其转换为结构(让你在两面都定义了结构,这是有道理的。)
谢谢!
编辑:这是我目前的结构:
struct COMPUTER_INFO
{
const char* Name;
int Brightness;
int Volume;
}
我在想,您可以轻松计算所有内容的大小,然后通过send()
发送。
答案 0 :(得分:1)
Name
是一个指针(包含一个地址),只对您计算机上的程序有意义。如果您将此结构作为字节发送,则接收程序将仅接收地址而不是包含该名称的字符。收到的地址也不会指向接收计算机内存中的有效位置。
Brightness
和Volume
ints
- ints
没有固定大小,它们是计算机的“自然”字大小(标准确实施加了一些限制) )。因此,发送和接收计算机上的sizeof(int)
可能不同。也可能存在编码差异,例如大与小端。请参阅:https://en.wikipedia.org/wiki/Endianness
答案 1 :(得分:0)
一般来说你是对的。当然,您可以发送原始字节流。但是,您希望接收器如何识别此字节流中结构成员的位置?特别是,示例中的char *具有可变大小,因此这是不可能的。 我建议使用Boost serialization包。您可以找到详细的教程here。该包将负责“序列化”(将对象打包成字节流)和“反序列化”(从字节流构造对象)。它几乎对所有STL容器都很方便,并且可以轻松扩展为自定义类型。