struct to ubyte[]

ww21xx 2012-02-22
各位兄弟们,小弟有几个疑惑,请各位兄弟帮下忙!
struct UserLogin
{
align(1):
ushort ClientId;
int AccectId;
string LoginUid;
string LoginPwd;
}
1.在D中如何将上面的结构体转成ubyte[]?
2.可以在结构体中能不能传string?还是只能char[]?如果只能char[]的话如何赋值,还是只能学C/C++中拷贝?
3.在另外一边如何将接收到的数据序列化成struct?
希望各位能帮忙解答下,谢谢咯!
对了 我是在SOCKET应用!
tomqyp 2012-02-22
呵呵 像d这类语言做这个是最爽的,把你的struct和ubyte[]放在同一个unite下就行了
ww21xx 2012-02-24
能详细说下么?
ww21xx 2012-02-24
  高手们 你们不回答,于心何忍啊。。。!
hqs7636 2012-02-24
tomqyp 写道
呵呵 像d这类语言做这个是最爽的,把你的struct和ubyte[]放在同一个unite下就行了


这个人净整些没用的 
qiezi 2012-02-25
std.outbuffer自己转吧,char[]本身是一个这样的结构:
struct {
  size_t len;
  char* p;
}
不是POD因此没办法直接传struct指针和大小。
tomqyp 2012-02-25
hqs7636 写道
tomqyp 写道
呵呵 像d这类语言做这个是最爽的,把你的struct和ubyte[]放在同一个unite下就行了


这个人净整些没用的 

简单办法把struct UserLogin对象强转成*ubyte就行了,考虑到D不建设用指针所以把它们放到一个unite里,我前天手机上的非要把所有过程一步步给出来才算用啊
amanout 2012-02-25
D2 切片转换
struct A{
	byte aaa;
	byte bbb;
	byte ccc;
	byte ddd;
}
void main(){
	A a={1,2,3,4};
	import std.stdio;
	auto data=(cast(byte*)cast(void*)&a)[0..A.sizeof];
	writefln("-----%d", data.length);
	writefln("%d %d %d %d", data[0],data[1],data[2],data[3]);
}
ww21xx 2012-02-25
我突然有点想哭。。。我是要从网络上接收一个结构的ubyte[] 然后转换成结构。。。大哥们。。。
的确用cast(struct UserLogin*)ubyte[] 的确可移转,但是如果结构里面有string或者有char[]取值不正常了。。。。
ww21xx 2012-02-25
amanout 写道
D2 切片转换
struct A{
	byte aaa;
	byte bbb;
	byte ccc;
	byte ddd;
}
void main(){
	A a={1,2,3,4};
	import std.stdio;
	auto data=(cast(byte*)cast(void*)&a)[0..A.sizeof];
	writefln("-----%d", data.length);
	writefln("%d %d %d %d", data[0],data[1],data[2],data[3]);
}


这样的确可以,这只是结构体转ubyte[],如果ubyte[]转成
struct UserLogin
{
    align(1):
      ushort ClientId;
      int AccectId;
      string LoginUid;
      string LoginPwd;
}
这样一个结构呢?
我强制转换了,但是在取LoginUid、LoginPwd就出错了!
Global site tag (gtag.js) - Google Analytics