将C++代码转换位C#,请各位大虾帮忙
第一个是CRC16校验方法,是在第二个方法中调用的ushort crc_16(ushort crc,ushort b)
{
crc = crc ^ (ushort) b << 8;
for (ushort i= 0; i < 8; i++) {
if ((crc & 0x8000) == 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
}
return crc & 0xffff;
}
QByteArray HDLCDec(QByteArray recvbuf){
QByteArray result = recvbuf;
result.clear();
unsigned char val;
int cnt = recvbuf.size();
//qDebug()<<recvbuf;
for(int i = 0; i < cnt; i++){
val = recvbuf.at(i);
//qDebug("the value of forcode %d",val);
if(val == 0x7e) {
continue;
}
if(val == 0x7d){
i++;
val = recvbuf.at(i) ^ 0x20;;
}
//qDebug("the value of decode %d",val);
result.append((char) val);
}
//qDebug()<<result;
if(result.size()<= 2)
{
result.clear();
return result;
}
ushort crc = 0, recvcrc = 0;
cnt = result.size()-2;
for(int i = 0; i < cnt; i++) {
crc = crc_16(crc, (ushort) result.at(i));
}
recvcrc = (((ushort)result.at(cnt))<<8)&0xff00;
recvcrc |= ((ushort)result.at(cnt+1))&0x00ff;
qDebug()<<crc<<" "<<recvcrc<<"the crc";
if(crc != recvcrc){
qDebug("we have wrong crc");
result.clear();
}
else{
result.resize(cnt);
}
return result;
} --------------------编程问答-------------------- ushort crc_16(ushort crc,ushort b)
{
crc = crc ^ (ushort) b << 8;
for (ushort i= 0; i < 8; i++) {
if ((crc & 0x8000) == 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
}
return crc & 0xffff;
}
c# 与c++代码差的不是太多
ushort crc_16(ushort crc, ushort b)
{
crc = (ushort)(crc ^ (ushort)b << 8);
for (ushort i = 0; i < 8; i++)
{
if ((crc & 0x8000) == 0x8000)
crc = (ushort)(crc << 1 ^ 0x1021);
else
crc = (ushort)(crc << 1);
}
return (ushort)(crc & 0xffff);
} --------------------编程问答--------------------
--------------------编程问答--------------------
ushort crc_16(ushort crc, ushort b)
{
crc = (ushort)(crc ^ (ushort)b << 8);
for (ushort i = 0; i < 8; i++)
{
if ((crc & 0x8000) == 0x8000)
crc = (ushort)(crc << 1 ^ 0x1021);
else
crc = (ushort)(crc << 1);
}
return (ushort)(crc & 0xffff);
}
List<byte> HDLCDec(List<byte> recvbuf)
{
List<byte> result = recvbuf;
result.Clear();
//unsigned char val;
byte val;
int cnt = recvbuf.Count;
//qDebug()<<recvbuf;
for (int i = 0; i < cnt; i++)
{
val = recvbuf[i];
//qDebug("the value of forcode %d",val);
if (val == 0x7e)
{
continue;
}
if (val == 0x7d)
{
i++;
val = (byte)(recvbuf[i] ^ 0x20); ;
}
//qDebug("the value of decode %d",val);
result.Add((byte)val);
}
//qDebug()<<result;
if (result.Count <= 2)
{
result.Clear();
return result;
}
ushort crc = 0, recvcrc = 0;
cnt = result.Count - 2;
for (int i = 0; i < cnt; i++)
{
crc = crc_16(crc, (ushort)result[i]);
}
recvcrc = (ushort)((((ushort)result[cnt]) << 8) & 0xff00);
recvcrc |= (ushort)(((ushort)result[cnt + 1]) & 0x00ff);
Console.WriteLine();// qDebug() << crc << " " << recvcrc << "the crc";
if (crc != recvcrc)
{
Console.WriteLine("we have wrong crc");
result.Clear();
}
else
{
result = new List<byte>();
}
return result;
}
补充:.NET技术 , C#