我目前正在开发客户端/服务器应用程序,通过 TCP 发送数据包。 要读取传入的数据包,我会这样做:
struct SomeRandomStruct
{
int nVal1;
int nVal2;
};
SomeRandomStruct* pStruct = reinterpret_cast<SomeRandomStruct*>(pBuffer);
现在有个小问题。假设我有一个这样的结构
struct SomeNewStruct
{
int nNameLen;
int nPassLen;
char szName[];
char szPass[];
};
由于 szName 和 szPass 的大小/长度是在同一个数据包中发送的,有没有办法在 reinterpret_cast 中设置它的大小,或者我是否必须手动读取数据包?
最佳答案
友情提示:
停止!
考虑像 google protocol buffers 这样的东西,以跨平台和安全的方式为您编码消息。
原因如下:
int 有多大?在你的机器上?今天?明天?它在 c++ 标准中未定义。
int 的二进制表示是什么?机器发送和机器接收是否相同?会一直这样吗? (如果您认为"is",那么您就错了)。同样,C++ 标准对此事无话可说。
结构中数据成员之间的填充是什么?所有主机上的所有编译器都一样吗? (回答:没有)
问问自己为什么像
htons()
这样的函数存在。它们存在是因为并非所有机器都相同,但它们之间的通信必须相同。
我可以继续......
关于c++ - 数据包转换为具有多个动态数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27907658/