2011年8月25日星期四

ODbgScript源碼學習(五)

int var::compare(const var& rhs) const //比較函數
{
// less than zero this < rhs
// zero this == rhs
// greater than zero this > rhs
if(vt != rhs.vt || vt == EMP || rhs.vt == EMP) //如果關鍵字var不為vt,或者vt為emp或者rhs.vt為emp
return -2; //則返回-2
if(vt == DW) //如果var的類型為雙字節類型 { if(dw < rhs.dw) return -1; //如果dw小於rhs.dw,則返回-1 if(dw == rhs.dw) return 0; //如果dw等於rhs.dw,則返回0 if(dw > rhs.dw) return 1; //如果dw大於rhs.dw,則返回1 } else if(vt == FLT) //如果var的類型為flt { if(flt < rhs.flt) return -1; //如果flt小於rhs.flt,則返回-1 if(flt == rhs.flt) return 0; //如果flt等於rhs.flt,則返回0 if(flt > rhs.flt) return 1; //如果flt大於rhs.flt,則返回1 } else if(vt == STR) { //如果var的類型為字符串類型 if (isbuf == rhs.isbuf) //如果使用的是否使用緩衝區與rhs一致 return str.compare(rhs.str); //返回字符串比較 else { //不一致的話 string Hex; //定義字符串 if (isbuf) { //如果使用緩衝區 //Buffer / String string s=str; //定義變量s為字符串str UnquoteString(s,'#','#'); //查找結束符 Str2Hex((string)rhs.str,Hex,rhs.size); //轉換rhs.str到hex類型,存入hex return s.compare(Hex); //返回s比較hex } else { //如果未使用緩衝區 //String / Buffer string s=rhs.str; //定義變量s為字符串rhs.str UnquoteString(s,'#','#'); //轉換rhs.str到hex類型,存入hex Str2Hex((string)str,Hex,size); //轉換str到hex類型,存入hex return Hex.compare(s); //返回hex比較s } } } return 0; //返回0
}

int var::compare(const string& rhs) const //比較字串類型
{
var tmp; //定義var的實例tmp
tmp.vt = STR; //tmp的vt為字符串類型
tmp.str = rhs; //tmp的str為rhs
return compare(tmp);
}

int var::compare(const ulong& rhs) const //比較ulong類型
{
var tmp(rhs); //定義var的實例tmp長度為rhs
return compare(tmp); //比較
}

int var::compare(const int& rhs) const //比較int類型
{
var tmp(rhs); //定義var的實例tmp長度為rhs
return compare(tmp); //返回比較
}

int var::compare(const long double& rhs) const //比較int類型
{
var tmp(rhs); //定義var的實例tmp長度為rhs
return compare(tmp); //返回比較
}

string var::strclean(void) //字符串清除
{
return CleanString(strbuff()); //使用字符串函數CleaString清除字符串緩衝區
}

string var::strbuffhex(void) //截去頭尾的
{
if (isbuf) //如果使用緩衝區,截去頭尾
//#001122# to "001122"
return str.substr(1,str.length()-2);
else { //如果未使用緩衝區
string s;
Str2Hex(str,s,size); //軟化str到HEX類型
return s; //返回hex
}
}

string var::strbuff(void) //字符串緩衝區
{
if (isbuf) { //如果使用緩衝區
//#303132# to "012"
string s=strbuffhex(); //字符串緩衝區到hex轉換
string tmp=s.substr(0,size); //去字符串開頭到size得大小
Str2Rgch(s,(char*)tmp.c_str(),size); //轉換字符串到rgch
s=tmp; //結果賦值給s
return s; //函數返回運算結果
} else
return str; //否則直接返回str
}

void var::resize(ulong newsize) //重設大小
{
if (vt==DW){ //如果var的類型為雙字節類型
if (newsize==1) { //如果新大小為1
dw&=0xFF; // 位与赋值為0xFF
}
else if (newsize==2) { //如果大小為2
dw&=0xFFFF; // 位与赋值為0xFFFF
}
}
if (size > newsize) { //如果大小大於重設大小 if (isbuf) { //如果使用緩衝區 *this = "#"+strbuff().substr(0,newsize)+"#"; //開頭結尾為"#"中間為指針為字符串緩衝區的0位開始,大小為newsize的子字符串
} else { //如果未使用緩衝區 *this = strbuff().substr(0,newsize); //指針為字符串緩衝區的0位開始,大小為newsize的子字符串 } } } }

没有评论:

发表评论