如何将D语言中的结构体实现到结构的ubyte []
或ubyte []
,请兄弟帮忙回答这个问题,谢谢!
如果某个结构包含string
或char []
该怎么办?
例如,这样的结构:
struct UserLogin
{
align(1):
ushort ClientId;
int AccectId;
string LoginUid;
string LoginPwd;
}
注意我在套接字中的应用程序!
答案 0 :(得分:6)
我认为标准库中没有任何内容可以自动将结构序列化和反序列化为字节流。 std.stream
为各种基本类型执行此操作,但不对整个结构执行此操作。 Apache Thrift支持正在进行中。在第三方解决方案中,您可以查看Orange序列化库。
答案 1 :(得分:4)
要转换原始数据,建议的习惯用语如下:
struct_type* s = new struct_type;
ubyte[] ub = cast(ubyte[]) s[0..1];
struct_type* s2 = cast(struct_type*) ub.ptr;
但是,这不会处理字符串和指针的序列化。您需要手动或使用库。
答案 2 :(得分:2)
@Dev Wolf:您必须自己编写序列化/反序列化。除了CyberShadow提到的Orange之外,您还有Thrift协议实现:http://klickverbot.at/code/gsoc/thrift/。我记得有些人也参与了Google Protocol Buffer的实施。
答案 3 :(得分:0)
struct UserLogin
{
align(1):
ushort ClientId;
int AccectId;
char[10] LoginUid;
char[10] LoginPwd;
}
UserLogin* readByteToStruct = cast(UserLogin*)ne.data;
能够正确获取数据......