4

ubyte []構造体への、または構造体へのD言語での構造体の実装方法、ubyte []兄弟がこの質問に答えるのを手伝ってください、ありがとう!

構造体にまたはが含まれている場合、stringまたはchar []何をすべきか?

たとえば、次のような構造です。

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

ソケット内の私のアプリケーションに注意してください!

4

4 に答える 4

6

標準ライブラリには、構造体をバイトストリームに自動的にシリアライズおよびデシリアライズするものはないと思います。std.stream構造体全体ではなく、さまざまな基本型に対してそれを行います。Apache Thrift のサポートは進行中です。サードパーティ ソリューションの中で、 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 に答える