java - android/java中的校验和计算

标签 java android

我用android/java写了一个checksum计算函数。功能如下

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));
}

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

谢谢

最佳答案

这里的问题是bytes[i](short) 转换。它扩展了标志。您应该将 (short)bytes[i] 更改为 (bytes[i] & 0xff)。这会给你正确的答案。

与大多数其他答案相反,它与字节溢出无关。您也不必更改数组类型。

关于java - android/java中的校验和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364445/

相关文章:

带有 “Unknown chromium error: -324” 的 Android 4.0 ICS Webview

java - 替换字符串中的值

Android Drawable getBitmap 大小不匹配

android - 使用 SyncAdapter 将徽章和 Intent 添加到 QuickContactBadge

java - 使用 AspectJ 编译器而不是 Javac 编译时出错

android - onCreate 中的方法仅在设备旋转后运行

java - 错误 :java. lang.ClassNotFoundException : Class org. 找不到 openjdk.jdi.ReferenceType

java - 使用 Dagger 注入(inject)登录 session

java - 将 RGB 转换为 HSB(又名 HSV)

java - 使用 403 状态代码响应的用例