请教:VC#2005代码转VC++ 6.0,逻辑并不复杂

纯冰糖 2008-12-15 09:09:41

//打包
public byte[] SetupPack(char Type)
{
CCheck check=new CCheck();
byte[] RStr,PHead=new byte[100],PBody,PTrail;
byte[] rSendPack=new byte[200];
byte[] Temp=new byte[200],sendtemp;
byte tempaddsum=0,tempxorsum=0;
// rSendPack.SetValue(0);

if (Type == 'A')
{
//包头
//int rand = GetSequenNumber();//包序列号

if (SetFlag == 1)//静态包
{
//包体
rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 43;//长度
rSendPack[3] = 0x02;//命令字
rSendPack[4] = 0x01;//设置标志1为静态,2为动态
//clientip
rSendPack[5] = Convert.ToByte(myset.ClientIP1.Text);
rSendPack[6] = Convert.ToByte(myset.ClientIP2.Text);
rSendPack[7] = Convert.ToByte(myset.ClientIP3.Text);
rSendPack[8] = Convert.ToByte(myset.ClientIP4.Text);
//子网掩码
rSendPack[9] = Convert.ToByte(myset.SubNetText1.Text);
rSendPack[10] = Convert.ToByte(myset.SubNetText2.Text);
rSendPack[11] = Convert.ToByte(myset.SubNetText3.Text);
rSendPack[12] = Convert.ToByte(myset.SubNetText4.Text);
//网关
rSendPack[13] = Convert.ToByte(myset.GatwayText1.Text);
rSendPack[14] = Convert.ToByte(myset.GatwayText2.Text);
rSendPack[15] = Convert.ToByte(myset.GatwayText3.Text);
rSendPack[16] = Convert.ToByte(myset.GatwayText4.Text);
//Mac地址
//char[] ch=myset.MACAdderText1.Text.ToCharArray();
//byte[] by=Encoding.ASCII.GetBytes(ch);
rSendPack[17] = Convert.ToByte(myset.MACAdderText1.Text.Trim(),16);
rSendPack[18] = Convert.ToByte(myset.MACAdderText2.Text.Trim(), 16);
rSendPack[19] = Convert.ToByte(myset.MACAdderText3.Text.Trim(), 16);
rSendPack[20] = Convert.ToByte(myset.MACAdderText4.Text.Trim(), 16);
rSendPack[21] = Convert.ToByte(myset.MACAdderText5.Text.Trim(), 16);
rSendPack[22] = Convert.ToByte(myset.MACAdderText6.Text.Trim(), 16);
//新网桥ID号
long lid = Convert.ToInt64(myset.IDtextBox.Text);
rSendPack[23] = Convert.ToByte(lid/256);
rSendPack[24] = Convert.ToByte(lid%256);
//服务器IP地址
rSendPack[25] = Convert.ToByte(myset.ServerIPtext1.Text);
rSendPack[26] = Convert.ToByte(myset.ServerIPtext2.Text);
rSendPack[27] = Convert.ToByte(myset.ServerIPtext3.Text);
rSendPack[28] = Convert.ToByte(myset.ServerIPtext4.Text);

//服务器端口号
lid = Convert.ToInt64(myset.PortText.Text);
rSendPack[29]=Convert.ToByte(lid/256);
rSendPack[30] = Convert.ToByte(lid%256);
//旧网桥ID号
lid = Convert.ToInt32(listView1.SelectedItems[0].SubItems[2].Text);
rSendPack[31] = Convert.ToByte(lid / 256);
rSendPack[32] = Convert.ToByte(lid % 256);

//终端名称10bytes
char[] chTemp = myset.TermNametextBox.Text.ToCharArray();
// byte[] bTemp
byte[] bTemp = Encoding.Default.GetBytes(chTemp, 0, chTemp.Length);
Buffer.BlockCopy(bTemp, 0, rSendPack, 33, bTemp.Length);

//包尾

rSendPack.CopyTo(Temp,0);
check.AddSum(Temp, 43, ref tempaddsum);
check.XorSum(Temp, 43, ref tempxorsum);
rSendPack[43] = tempaddsum;
rSendPack[44] = tempxorsum;



}//if (SetFlag == 1)

//动态设置打包begin
else if(SetFlag ==0)
{

rSendPack.Initialize();
rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 43;//长度
rSendPack[3] = 0x02;//命令字
rSendPack[4] = 0x02;//设置标志1为静态,2为动态

//Mac地址
//char[] ch=myset.MACAdderText1.Text.ToCharArray();
//byte[] by=Encoding.ASCII.GetBytes(ch);
rSendPack[17] = Convert.ToByte(myset.MACAdderText1.Text.Trim(), 16);
rSendPack[18] = Convert.ToByte(myset.MACAdderText2.Text.Trim(), 16);
rSendPack[19] = Convert.ToByte(myset.MACAdderText3.Text.Trim(), 16);
rSendPack[20] = Convert.ToByte(myset.MACAdderText4.Text.Trim(), 16);
rSendPack[21] = Convert.ToByte(myset.MACAdderText5.Text.Trim(), 16);
rSendPack[22] = Convert.ToByte(myset.MACAdderText6.Text.Trim(), 16);


//新id号
long tempid = Convert.ToInt64(myset.IDtextBox.Text);
rSendPack[23] = Convert.ToByte(tempid / 256);
rSendPack[24] = Convert.ToByte(tempid%256);

//服务器IP地址
rSendPack[25] = Convert.ToByte(myset.ServerIPtext1.Text);
rSendPack[26] = Convert.ToByte(myset.ServerIPtext2.Text);
rSendPack[27] = Convert.ToByte(myset.ServerIPtext3.Text);
rSendPack[28] = Convert.ToByte(myset.ServerIPtext4.Text);

//服务器端口号
long port = Convert.ToInt64(myset.PortText.Text);
rSendPack[29] = Convert.ToByte(port / 256);
rSendPack[30] = Convert.ToByte(port % 256);
//旧网桥ID号
int lid = Convert.ToInt32(listView1.SelectedItems[0].SubItems[2].Text);
rSendPack[31] = Convert.ToByte(lid / 256);
rSendPack[32] = Convert.ToByte(lid % 256);

//终端名称10bytes
char[] chTemp = myset.TermNametextBox.Text.ToCharArray();
// byte[] bTemp
byte[] bTemp = Encoding.Default.GetBytes(chTemp, 0, chTemp.Length);
Buffer.BlockCopy(bTemp, 0, rSendPack, 33, bTemp.Length);



rSendPack.CopyTo(Temp, 0);
check.AddSum(Temp, 43, ref tempaddsum);
check.XorSum(Temp, 43, ref tempxorsum);
rSendPack[43] = tempaddsum;
rSendPack[44] = tempxorsum;

}//动态设置打包end


}//if (Type == 'A')

if (Type == 'S')//打搜索包
{
//char[] cSetuppack = new char[] {'\0xff','\0x30','\x4','\0x01' };
//char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 4;//长度
rSendPack[3] = 0x01;//命令字
Temp = rSendPack;
check.AddSum(Temp, 4, ref tempaddsum);
check.XorSum(Temp, 4, ref tempxorsum);
rSendPack[4] = tempaddsum;
rSendPack[5] = tempxorsum;


}//if (Type == 'S')

return rSendPack;
}
...全文
133 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
纯冰糖 2008-12-22
  • 打赏
  • 举报
回复
继续顶~~
纯冰糖 2008-12-19
  • 打赏
  • 举报
回复
up
qwertxp 2008-12-18
  • 打赏
  • 举报
回复
注意你的rSendPack变量,是个局部变量,你return的时候,此变量被销毁,所以无法得到正确结果。
考虑改为全局变量或参数传递。
sincor 2008-12-18
  • 打赏
  • 举报
回复
能力有限 实在看不懂 也不会
纯冰糖 2008-12-17
  • 打赏
  • 举报
回复
再顶,急!
纯冰糖 2008-12-16
  • 打赏
  • 举报
回复
继续顶顶,实在写不出来了,哪位朋友给帮帮忙吧。
linux_ch 2008-12-15
  • 打赏
  • 举报
回复
并不復雜,為什么還要問?
纯冰糖 2008-12-15
  • 打赏
  • 举报
回复
写成VC6的代码,调试时rSendPack是乱码,莫名其妙的。拜托各位啦~~~
//设置参数包
if(Type=='A')
{
if(nSetFlag==1)
{
//包体
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=43;
rSendPack[3]=0x02;
rSendPack[4]=0x01;

//ClientIP
int nClientIP1Len=strlen(strClientIP1);
memcpy(rSendPack,strClientIP1,nClientIP1Len);
}
if(nSetFlag==0)
{

}
}
cpio 2008-12-15
  • 打赏
  • 举报
回复
BYTE* SetupPack(char Type)

或者用std::vector<BYTE> SetupPack(char Type),这样不用删除指针
dayizhixiaotutu 2008-12-15
  • 打赏
  • 举报
回复
c#中byte对应c++中的unsigned char
killer_liqiao 2008-12-15
  • 打赏
  • 举报
回复
up
纯冰糖 2008-12-15
  • 打赏
  • 举报
回复
帮忙看看吧,长一点,但逻辑不难,就是数值转换的,
vc里写
BYTE[] SetupPack(char Type);函数就出错,不知道VC的BYTE和C#的byte[]怎么转换啊
devilli 2008-12-15
  • 打赏
  • 举报
回复
好长~
纯冰糖 2008-12-15
  • 打赏
  • 举报
回复

//写成VC的,rSendPack在调试时是乱码,不知道在VC里怎么用C#的byte[]类型数据

//打包
BYTE CNetBrgSetParamDlg::SetupPack(char Type)
{
BYTE RStr,PBody,PTrail;
BYTE PHead[100] = {0};
BYTE rSendPack[200]={0};
BYTE temp[200]={0};
BYTE sendTemp;
BYTE tempaddsum=0;
BYTE tempxorsum=0;
CCheck check;


//设置参数包
if(Type=='A')
{
if(nSetFlag==1)
{
//包体
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=43;
rSendPack[3]=0x02;
rSendPack[4]=0x01;

//ClientIP
int nClientIP1Len=strlen(strClientIP1);
memcpy(rSendPack,strClientIP1,nClientIP1Len);
}
if(nSetFlag==0)
{

}
}

//搜索包
if(Type=='S')
{
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=4;
rSendPack[3]=0x01;
// strcpy(temp,rSendPack);
check.AddSum(temp,4,tempaddsum);
check.XorSum(temp,4,tempxorsum);
rSendPack[4]=tempaddsum;
rSendPack[5]=tempxorsum;
}

return rSendPack[200];
}
纯冰糖 2008-12-15
  • 打赏
  • 举报
回复

//解包函数
private int unpack(byte[] S_RecPack)
{
CCheck uncheck = new CCheck();
DB_class mydb = new DB_class();
OleDbConnection ole_con=new OleDbConnection ();
string[] split = null;
string substr = "\n", Command;
char[] del = substr.ToCharArray();//将字符串分解为数组
byte[] tempbuff = new byte[100], unbuff = null, rTempBuff = new byte[100];
byte addsum=0,xorsum=0;
int rsult=0;

//检查包类型0xff30是下行包,0xff40是上行包
if ((S_RecPack[0].ToString() != "255")&&(S_RecPack[1].ToString() != "40"))
{
return rsult = -1;

}

//检查校验
int len=Convert.ToInt32(S_RecPack[2]);
Buffer.BlockCopy(S_RecPack, 0, rTempBuff, 0, S_RecPack.Length-2);
addsum= S_RecPack[len];
xorsum=S_RecPack[len+1];
if ((uncheck.AddSum(rTempBuff, len, ref addsum) != true) && (uncheck.XorSum(rTempBuff, len, ref xorsum) != true))
{
MessageBox.Show("数据校验错误!","参数设置");
rsult= - 2;
return rsult;
}
Command = Convert.ToString( S_RecPack[3]);
switch(Command)
{
case "2"://收到设置包

int flag = Convert.ToInt32(S_RecPack[6]);
if (flag == 0)//服务机设置成功
{
//发送搜索包SendPack();
MessageBox.Show("服务机设置成功!", "参数设置");
if (myset.SetIDFlag == true)
{
//新设置id号
// MessageBox.Show("服务机设置成功!","参数设置");
int r_newid = Convert.ToUInt16(S_RecPack[4] * 256 + S_RecPack[5]);
//添加数据库
try
{
mydb.ConnectDB(ref ole_con);
if (mydb.InsertID(ole_con, r_newid))
{

}

p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);
}
catch
{
p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);
MessageBox.Show("网络信息设置异常!", "参数设置");
}
}
else
{
p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);

}

}
else
{

rsult= - 3;
MessageBox.Show("服务机设置失败,请重试!", "参数设置");
return rsult;
}
break;
case "1"://收到搜索包
//刷新显示
string strtem = Encoding.ASCII.GetString(S_RecPack);

//strtem = Convert.ToString(S_RecPack, 10);
sSetIp[0] = Convert.ToString(S_RecPack[4]);//设置标志

sSetIp[1] = Convert.ToString(S_RecPack[5]);//cilentip
sSetIp[2] = Convert.ToString(S_RecPack[6]);
sSetIp[3] = Convert.ToString(S_RecPack[7]);
sSetIp[4] = Convert.ToString(S_RecPack[8]);

sSetIp[5] = Convert.ToString(S_RecPack[9]);//子网掩码
sSetIp[6] = Convert.ToString(S_RecPack[10]);
sSetIp[7] = Convert.ToString(S_RecPack[11]);
sSetIp[8] = Convert.ToString(S_RecPack[12]);

sSetIp[9] = Convert.ToString(S_RecPack[13]);//网关
sSetIp[10] = Convert.ToString(S_RecPack[14]);
sSetIp[11] = Convert.ToString(S_RecPack[15]);
sSetIp[12] = Convert.ToString(S_RecPack[16]);

//Mac地址
StringBuilder sb = new StringBuilder();

Array.Reverse(S_RecPack,17,1);
foreach (byte b in S_RecPack)
sb.AppendFormat("{0:x2}", b);
sSetIp[13] = sb.ToString(34, 2);
sSetIp[14] = sb.ToString(36, 2);
sSetIp[15] = sb.ToString(38, 2);
sSetIp[16] = sb.ToString(40, 2);
sSetIp[17] = sb.ToString(42, 2);
sSetIp[18] = sb.ToString(44, 2);

////网桥ID号
sSetIp[19] = Convert.ToString(S_RecPack[23] * 256 + S_RecPack[24]);



sSetIp[21]= Convert.ToString(S_RecPack[25]);//服务器IP地址
sSetIp[22] = Convert.ToString(S_RecPack[26]);
sSetIp[23] = Convert.ToString(S_RecPack[27]);
sSetIp[24]= Convert.ToString(S_RecPack[28]);

sSetIp[25] = Convert.ToString(S_RecPack[29] * 256 + S_RecPack[30]);//服务器端口号

//终端名称
byte[] bTemp=new byte[50] ;
Buffer.BlockCopy(S_RecPack, 31, bTemp, 0, 10);
sSetIp[26] = Encoding.Default.GetString(bTemp, 0, 10);

return rsult = 1;

break;
default:
return rsult=-4;
break;

}//switch(Command)


return rsult;


}

纯冰糖 2008-12-15
  • 打赏
  • 举报
回复
C# byte 转 C++ BYTE 哪位朋友知道啊?

BYTE rSendPack[200]={0};
BYTE temp[200]={0};
BYTE sendTemp;
BYTE tempaddsum=0;
BYTE tempxorsum=0;
CCheck check;


//设置参数包
if(Type=='A')
{
if(nSetFlag==1)
{
//包体
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=43;
rSendPack[3]=0x02;
rSendPack[4]=0x01;
}
我修改的调试时就是有错误啊~~

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧