我尝试了解BSD校验和计算算法,用Java语言编写。
Wiki写道:
byte checksum(byte[] input) {
byte checksum = 0;
for (byte cur_byte: input) {
checksum = (byte) (((checksum & 0xFF) >>> 1) + ((checksum & 0x1) << 7)); // Rotate the accumulator
checksum = (byte) ((checksum + cur_byte) & 0xFF); // Add the next chunk
}
return checksum;
}
我的问题:
感谢您的帮助:)
答案 0 :(得分:0)
b&amp; 0xFF通常用于将带符号的字节转换为位相同的int。在这种情况下,不需要 - (字节)(b&amp; 0xFF)与(b)相同。例如((byte)-1)&amp; 0xFF = 255
12345678&gt;&gt;&gt; 1 01234567
12345678&lt;&lt; 7 80000000 ADD - &gt; 81234567
因此它是循环旋转