在D中使用结构作为缓冲区

时间:2014-04-09 20:02:59

标签: sockets buffer std d

我想从套接字读取,并将所有输出转发到套接字。在C中,您只需转发指向结构的指针,以及一个表示结构有多大的整数。

然而,在D中,实际上存在数组,而不仅仅是指针。如何从Socket读入D中的结构?

struct MyStruct {
    ubyte myVar;
}

MyStruct myStruct;
socket.receive(myStruct); // How to do this

1 个答案:

答案 0 :(得分:3)

通常,你可以通过将ubyte []转换为指针,然后将其切片来获取ubyte []:

ubyte[] buffer = (cast(ubyte*)&myStruct)[0 .. myStruct.sizeof]);

几天前聊天室的某个人显示了一个甚至缩短的方式,但我不记得它是什么......

D数组是一个指针和长度对,从概念上讲,它与C指针和整数相同。

BTW for Sockets,不要忘记检查返回值,因为您可能无法获得足够的数据来立即填充整个结构!一旦有任何数据就会收到返回,在开放网络上可能只有一个数据包使数组/结构不完整。