gpt4 book ai didi

c++ - 将字符缓冲区类型转换为来自套接字的结构

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:44 27 4
gpt4 key购买 nike

我正在使用以下代码从套接字读取数据:

while (true) 
{

int len = 0;
ioctl(sd, FIONREAD, &len);
if (len > 0)
{
len = read(sd, databuf, len);
}

else
std::cout << "error" << std::endl;
}

有一个来自套接字的结构流。结构的大小已定义,我有。

那么我怎样才能读取像这样的结构:

 typedef struct
{
short msglen;
short id;
int seqno;
}HEADER;

我想对它进行类型转换,但我不知道该怎么做。字符缓冲区将一个接一个地包含多个结构。我只需要读取前 8 个字节即可获得第一个。

此外,还有一个 while 循环,因为我正在从网络接收连续的多播消息流。

最佳答案

符合标准且安全的方法是使用memcpy:

HEADER header;
char buffer[/*size*/];

/* read data into buffer */

std::memcpy(&header, buffer, sizeof(header));

现代编译器完全有能力优化函数调用。

不要尝试用 reinterpret_cast 之类的东西来转换 buffer。这是未定义的行为,因为它违反了严格的别名规则(您可以通过 charunsigned char 类型的泛左值访问任何类型对象的存储值,但反过来不成立)。

作为旁注,typedef struct {/* ... */} HEADER; 是一种 C 主义。只需执行 struct HEADER {/* ... */};

关于c++ - 将字符缓冲区类型转换为来自套接字的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24730323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com