我需要在ByteArrayOutputStream
中对所有数据字节求和,为结果添加+1并取2个最低有效字节。
int checksum = 1;
for(byte b : byteOutputStream.toByteArray()) {
checksum += b;
}
获取2个最低有效字节的任何输入都会有所帮助。 Java 8在环境中使用。
答案 0 :(得分:3)
如果你真的意味着最不重要的字节:
checksum & 0xFFFF
如果您想从校验和中获取最不重要的位,那么:
checksum & 0x3
答案 1 :(得分:1)
添加
checksum &= 0x0000ffff;
这将把2个最低有效字节左边的所有内容清零。
答案 2 :(得分:1)
您的问题有点不明确。你没有说,你想用这两个字节做什么,也不想用它们存储它们(这取决于你想做什么)。
要获得单个字节,您可以使用
byte lowest = (byte)checksum, semiLowest=(byte)(checksum>>8);
如果你想将它们存储在一个整数变量中,你必须决定如何用数字解释这些字节,即有符号或无符号。
如果您需要签名解释,操作就像
一样简单short lowest2bytes = (short)checksum;
如果你想要一个无符号的解释,那就是Java没有专用类型的障碍。存在2字节大小的无符号类型(char
),但是当其他代码尝试将其解释为字符值(即打印时)时,将其用于数值会引起混淆。因此,在这种情况下,最佳解决方案是再次使用int
变量,并仅使用无符号char
值对其进行初始化:
int lowest2bytes = (char)checksum;
请注意,这在语义上等同于
int lowest2bytes = checksum&0xffff;
见于其他解决方案。