4

如何在D语言中执行struct to ubyte []or ubyte []to struct,请兄弟帮忙回答这个问题,谢谢!

如果结构包含stringchar []做什么?

比如这样的结构:

struct UserLogin 
{ 
    align(1): 
      ushort ClientId; 
      int AccectId; 
      string LoginUid; 
      string LoginPwd; 
} 

注意我在socket中的应用!

4

4 回答 4

6

我认为标准库中没有任何东西可以自动将结构序列化和反序列化为字节流。std.stream对各种基本类型执行此操作,但不是整个结构。Apache Thrift 支持正在进行中。在 3rd-party 解决方案中,您可以查看Orange序列化库。

于 2012-02-25T14:31:46.273 回答
4

要转换原始数据,建议的习语是这样的:

struct_type* s = new struct_type;
ubyte[] ub = cast(ubyte[]) s[0..1];
struct_type* s2 = cast(struct_type*) ub.ptr;

但是,这不会处理字符串和指针的序列化。您将需要手动或使用库来执行此操作。

于 2012-02-26T01:44:35.107 回答
2

@Dev Wolf:您必须自己编写序列化/反序列化。除了 Cyber​​Shadow 提到的 Orange 之外,您还有 Thrift 协议实现: http: //klickverbot.at/code/gsoc/thrift/。我记得有些人也在研究 Google Protocol Buffer 的实现。

于 2012-02-25T14:35:08.923 回答
0
struct UserLogin
{
  align(1): 
  ushort ClientId; 
  int AccectId; 
  char[10] LoginUid; 
  char[10] LoginPwd; 
}

UserLogin* readByteToStruct = cast(UserLogin*)ne.data;

将能够正确获取数据...

于 2012-02-27T15:13:08.353 回答