从整数中获取最低有效字节

时间:2016-05-27 06:12:56

标签: java

我需要在ByteArrayOutputStream中对所有数据字节求和,为结果添加+1并取2个最低有效字节。

    int checksum = 1;
    for(byte b : byteOutputStream.toByteArray()) {
        checksum += b;
    }

获取2个最低有效字节的任何输入都会有所帮助。 Java 8在环境中使用。

3 个答案:

答案 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;

见于其他解决方案。