java - Java 中的二进制加法校验和

标签 java checksum

我正在尝试为消息实现校验和。规范是:

The checksum is implemented such that the entire message wrapper and the message data, excluding the checksum, is a result of a simple binary addition truncated to four bytes.

不过,恐怕我不知道如何用 Java 来做。如果有任何建议,我将不胜感激。

M.

最佳答案

它们可能意味着所有字节的简单无符号加法(假设 8 位字节是您与之交互的最小单位):

byte[] data = getTheDataFromSomewhere();
long checksum = 0;
for (int i = 0; i < data.length; i++) {
  checksum += (data[i] & 0xFF);
}
checksum = checksum & 0xFFFFFFFFL; // truncate to 4 byte

您也可以在那里使用 int,但这会导致负数。按位计算是等价的,但这样更容易比较值。

关于java - Java 中的二进制加法校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816361/

相关文章:

java - Jgraphx样式应用于circleLayout

java - 确认实体的最佳方法

java - 如何调整 GridLayout 中 JComponent 的大小?

java - 即使从未抛出异常,使用 try-catch block 是否昂贵?

objective-c - 在 Swift 中计算部分文件的 64 位校验和

hash - 是否有 2 位或 3 位校验和算法

C++ Boost哈希计算无冲突

java - 在 Java 中不使用 split 方法将字符串标记为字符串数组

java - android生成7位校验和以将数据传递到蓝牙模块

C. ASCII 十六进制值数组的校验和计算