我需要将计算校验和的 C 代码块转换为 Java 代码.我不知道该怎么做(.



我有一个电子板,我正在上面打印数据。要计算输出的校验和字节,请使用以下算法:

word CountCS(byte *Buff, byte Cnt) //Cnt - count of bytes
{
  dword cs1, cs2, m;
  byte k;
  k=0;
  cs1=0;
  cs2=0;
  while (Cnt) {
    m=*Buff;
    cs1 +=m;
    m ^=0x5A;
    if (k) m=(m >> k) | (m << (8-k));
    k=(k+1) & 0x07;
    cs2 +=m;
    Buff++;
    Cnt--;
  };
  return (cs2<<8) | (cs1 & 0xFF);
}

记分牌的制造商提供 C 代码,我需要将其转换为 java。我尝试转换,但结果是错误的,这里是 java 代码

   public int checksum(int [] buffer, int count) {
    int cs1 =0, cs2 = 0, m;
    int k = 0, i = 0;
    while (count != 0) {
        m = buffer[i];
        cs1 += m;
        m ^= 0x5a;
        if (k != 0) m = (m >> k) | (m << (8-k));
        k = (k +1) & 0x07;
        cs2 += m;
        i++;
        count--;
    }
    return (cs2 << 8) | (cs1 & 0xff);
}

谁能看出我做错了什么?很抱歉,我是 Java 的新手。

非常感谢,问题解决了

if (k) m=(m >> k) | (m << (8-k));

应该是

if (k != 0) m = (m >> k) | (m << (8-k));

if (k == 0) m = (m >> k) | (m << (8-k));

您的变量大小不同:k(字节与整数)。 在java中int是32位有符号的。 C++中的字节可能取决于平台,更有可能是 8 或 16 位无符号。因此,当您添加和乘法/移位等时,它会有不同的值。

相关内容

最新更新