struct to ubyte[]

hqs7636 2012-02-25
tomqyp 写道
hqs7636 写道
tomqyp 写道
呵呵 像d这类语言做这个是最爽的,把你的struct和ubyte[]放在同一个unite下就行了


这个人净整些没用的 

简单办法把struct UserLogin对象强转成*ubyte就行了,考虑到D不建设用指针所以把它们放到一个unite里,我前天手机上的非要把所有过程一步步给出来才算用啊


(*^__^*) 嘻嘻……没当过新手吧,把关键代码写出来,知道的也就敲几下键盘,不知道的可一阵抓瞎了。。。
amanout 2012-02-26


import std.conv;
import std.string;

struct UserLogin {
	align(1):
	ushort ClientId;
	int AccectId;
	string LoginUid;
	string LoginPwd;
	
	// 序列化
	string toString(){
		return to!string(ClientId)~"|"~to!string(AccectId)~"|"~LoginUid~"|"~LoginPwd;
	}
}

// 解析
int parserUserLogin(string d,ref UserLogin a){
	string[] re=split(d, "|");
	if(re.length!=4) return 0;
	a.ClientId=to!(ushort)(re[0]);
	a.AccectId=to!(int)(re[1]);
	a.LoginUid=re[2];
	a.LoginPwd=re[3];
	return 1;
}

import std.stdio;
import std.windows.charset;
void main(){
    UserLogin a={1,2,"aaaa","bbbbb"};
	writeln(a);
	// ---------------------
	if(parserUserLogin("1|2|cccc|ddddd", a)){
		writeln(a);
	}
}

flythink 2012-02-27
socket中用定长的字符数组比用字符串好
ww21xx 2012-02-27
  说实话,太出乎我的意料了!这样的解析。。。从来没想到过。。。
另外如果用定长的char[长度]的话,在struct to ubyte[]的时候 转不了,,,不知是啥原因,我在外边问了下,那些老外建议我用google的pb。。。哎。。。
betty_betty2008 2012-02-27
这个贴子有用不?
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=32955
ww21xx 2012-02-27
betty_betty2008 写道


嗯,这个对的没的问题。。。

我现在主要问题是  ubyte[] to struct时,不知如何取struct中的 string 或者 char[]
ww21xx 2012-02-27
其实 可以不用 new
ww21xx 2012-02-27
搞定了。。。哎。。。不过还是建议用PB,不然结构对齐麻烦的很。。。
hqs7636 2012-02-27
贴出来看看
ww21xx 2012-03-08
hqs7636 写道
贴出来看看

其实 我就是用了字符串定长 没有用string;
换句话说 char[长度] 替换 string,这样就可以了,走的还是C++方式!
Global site tag (gtag.js) - Google Analytics