android/java中的校验和计算

Ris*_*han 8 java android

我在android/java中写了一个校验和计算函数.功能如下

void CalculateCheckSum( byte[] bytes ){
     short CheckSum = 0, i = 0;
     for( i = 0; i < bytes.length; i++ ){
        CheckSum = (short) ((short)CheckSum + (short)bytes[i]);
     }

     Log.i("Checksum", Integer.toHexString(CheckSum));
}
Run Code Online (Sandbox Code Playgroud)

计算校验和的输入值为0xEF,0x01,0xEF,0x01,0x33,0x0C,0xB8,0xE5,0xFC,0x34,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF.我手动计算校验和值,结果是0xCE4.使用上述功能时,我得到的答案是0xFFFFFFE4.在我的计算中是否有任何错误,如果是,那么请纠正我.

谢谢

Apr*_*ian 1

byte根据Java 文档

字节的值介于2^(-7)(2^7)-1(-128 到 127) 之间。

但你的值0xEF(十进制 239)已经达到了字节的限制。这就是导致总和给出错误数字的原因。