请大家帮我转一下到C#,小弟一直没学过C++.可现在需要把下面的转为C#..请帮看一下.谢谢这个是保存的.这里不知是什么意思..
for(i=0; i<Nboard; i++){
s=&board[i];
fputc(s->sign[0]*3 + s->sign[1] + '0', f); //这行
}
下面是打开上面保存的内容
for(s=board, p=buf+12; s<board+Nboard; s++, p++){
v=*p-'0';
if(v<0 || v>8){ err=11; break; }
if(pass){
greater=1;
putSign(v/3,s,0);
putSign(v%3,s,1);
}
}void putSign(int q, Tsquare *s, int k)
{
if(!s->neighbour[k]){
assert(!q);
return;
}
if(q){
if(!s->sign[k]) Nsign++;
}else{
if(s->sign[k]) Nsign--;
}
s->sign[k]= BYTE(q);
s->neighbour[k]->sign[k^2]= BYTE(q ? 3-q : 0); //这行不知是什么意思..
}还有以下的:
template <class T> inline void aminmax(T &x,int l,int h){
if(x<l) x=l;
if(x>h) x=h;
}template <class T> inline void amax(T &x,int h){
if(x>h) x=h;
}template <class T> inline void amin(T &x,int l){
if(x<l) x=l;
}谢谢...
for(i=0; i<Nboard; i++){
s=&board[i];
fputc(s->sign[0]*3 + s->sign[1] + '0', f); //这行
}
下面是打开上面保存的内容
for(s=board, p=buf+12; s<board+Nboard; s++, p++){
v=*p-'0';
if(v<0 || v>8){ err=11; break; }
if(pass){
greater=1;
putSign(v/3,s,0);
putSign(v%3,s,1);
}
}void putSign(int q, Tsquare *s, int k)
{
if(!s->neighbour[k]){
assert(!q);
return;
}
if(q){
if(!s->sign[k]) Nsign++;
}else{
if(s->sign[k]) Nsign--;
}
s->sign[k]= BYTE(q);
s->neighbour[k]->sign[k^2]= BYTE(q ? 3-q : 0); //这行不知是什么意思..
}还有以下的:
template <class T> inline void aminmax(T &x,int l,int h){
if(x<l) x=l;
if(x>h) x=h;
}template <class T> inline void amax(T &x,int h){
if(x>h) x=h;
}template <class T> inline void amin(T &x,int l){
if(x<l) x=l;
}谢谢...
for(i=0; i<Nboard; i++){
s=board[i];//board应该是个结构数组
fputc(s.sign[0]*3 + s.sign[1] + '0', f); //这行似乎是存下一个相对字符'0'进行偏移的字符,s.sign[0]*3 + s.sign[1]是偏移参数,这个参数又是存于board[i]结构数组中的,你给的信息不完整。
}
s->neighbour[k]->sign[k^2]= BYTE(q ? 3-q : 0)就是说q是否是0否则返回3-q,是则返回0,然后强制转成BYTE,将此值赋给s->neighbour[k]->sign[k异或00000010]
template <class T> inline void aminmax(T &x,int l,int h){
if(x<l) x=l;
if(x>h) x=h;
}template <class T> inline void amax(T &x,int h){
if(x>h) x=h;
}template <class T> inline void amin(T &x,int l){
if(x<l) x=l;
}
C++中一般说模版,C#中一般说泛型,但C#中好像没内联函数一说,所以要定义泛型类
class re
{
public void ReSet_X();
public void aminmax(T &x,int l,int h){
if(x<l) x=l;
if(x>h) x=h;
}
public void amax(T &x,int h){
if(x>h) x=h;
}public void amin(T &x,int l){
if(x<l) x=l;
}}
000000000000002000000002603000000001030000100000000000000000300000020500060000000
不知用putSign这里的还原是多少...可以用C#还原出来吗..谢谢
s.sign[0]*3 + s.sign[1] + '0' = 2 那这S等于多少呢?
for(int i=12,s=board, p=buf[i]; s<board+Nboard; s++, i++){
v=p[i]-'0';
if(v<0 || v>8){ err=11; break; }
if(pass){
greater=1;
putSign(v/3,s,0);
putSign(v%3,s,1);
}
}void putSign(int q, Tsquare s, int k)
{
if(!s.neighbour[k]){
assert(!q);
return;
}
if(q){
if(!s.sign[k]) Nsign++;
}else{
if(s.sign[k]) Nsign--;
}
s.sign[k]= BYTE(q);
s.neighbour[k].sign[k^2]= BYTE(q ? 3-q : 0);
}
则s.sign[0]=0,s.sign[1]=2 for(s=board, p=buf+12; s<board+Nboard; s++, p++){
v=*p-'0';
if(v<0 || v>8){ err=11; break; }
if(pass){
greater=1;
//下面所做的工作是把如8这样的的数还原成s->sign[0]=2, s->sign[1]=2,写入时必然就是
s->sign[0]×3+s->sign[1](“ fputc(s.sign[0]*3 + s.sign[1]//就是前面这一段 + '0', f); ”)
putSign(v/3,s,0);
putSign(v%3,s,1);
}
}void putSign(int q, Tsquare *s, int k)
{
if(!s->neighbour[k]){
assert(!q);
return;
}
if(q){
if(!s->sign[k]) Nsign++;
}else{
if(s->sign[k]) Nsign--;
}
s->sign[k]= BYTE(q);
s->neighbour[k]->sign[k^2]= BYTE(q ? 3-q : 0); //这行还原的东西很奇怪,如果是字符’8‘还原的就s->neighbour[0]->sign[2]=1,s->neighbour[0]->sign[3]=1,但如果是’9‘还原的就是s->neighbour[0]->sign[2]=0,s->neighbour[0]->sign[3]=0,你给的信息就只能读出这么多了
}
长度还原肯定是2倍长了
然后依下表
'0'->00
'1'->01
'2'->02
'3'->10
'4'->11
'5'->12
'6'->20
'7'->21
'8'->22
'9'->30