循环冗余校验计算C到C#代码转换不起作用 unsigned short calculaterc(字符*缓冲区,整数大小) { 无符号短cword=0; 无符号短ch; int i,j; 对于(i=0;i
试试这个:循环冗余校验计算C到C#代码转换不起作用 unsigned short calculaterc(字符*缓冲区,整数大小) { 无符号短cword=0; 无符号短ch; int i,j; 对于(i=0;i,c#,C#,试试这个: public static int CalculateCheckSum(byte[] strsResponse) { short crc = 0; try { short ch; for (int i = 0; i < strsResponse.Length; i++) { ch = (short)(strsResponse[i] << 8); f
public static int CalculateCheckSum(byte[] strsResponse)
{
short crc = 0;
try
{
short ch;
for (int i = 0; i < strsResponse.Length; i++)
{
ch = (short)(strsResponse[i] << 8);
for (int j = 0; j < 8; j++)
{
bool xorFlag = (ch & 0x8000)==1?false:true;
if (xorFlag)
{
crc = (short)((crc <<= 1) ^ 4129);
}
else
{
crc <<= 1;
}
ch <<= 1;
}
}
}
catch (Exception ex)
{
return crc = 0;
}
return crc;
}
publicstaticintcalculatechecksum(字节[]strssresponse)
{
短crc=0;
尝试
{
乌舒特;
for(int i=0;i ch=(ushort)(strssresponse[i]而不是开始广泛讨论“不工作”的含义(任何编译错误、运行时错误、意外行为等),也许你应该为C#寻找一个现有的CRC实现。我无法想象以前没有人用C#写过这个。事实上,我认为它已经存在于.NET中。@GolezTrol除非它隐藏在某个意想不到的地方,奇怪的是它似乎不在.NET中。首先,short!=无符号short
,这些符号位确实使CE
public static int CalculateCheckSum(byte[] strsResponse)
{
short crc = 0;
try
{
short ch;
for (int i = 0; i < strsResponse.Length; i++)
{
ch = (short)(strsResponse[i] << 8);
for (int j = 0; j < 8; j++)
{
bool xorFlag = (ch & 0x8000)==1?false:true;
if (xorFlag)
{
crc = (short)((crc <<= 1) ^ 4129);
}
else
{
crc <<= 1;
}
ch <<= 1;
}
}
}
catch (Exception ex)
{
return crc = 0;
}
return crc;
}
public static int CalculateCheckSum(byte[] strsResponse)
{
short crc = 0;
try
{
ushort ch;
for (int i = 0; i < strsResponse.Length; i++)
{
ch = (ushort)(strsResponse[i] << 8);
for (int j = 0; j < 8; j++)
{
bool xorFlag = ((ch & 0x8000) ^ (cword & 0x8000)) == 0 ? false : true;
if (xorFlag)
{
crc = (ushort)((crc <<= 1) ^ 4129);
}
else
{
crc <<= 1;
}
ch <<= 1;
}
}
}
catch (Exception ex)
{
return crc = 0;
}
return crc;
}