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
![]() 的确用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就出错了! |