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

Java 从整数中获取最低有效字节,java,Java,我需要通过tearrayoutputstream对中的所有数据字节求和,将+1添加到结果中,并取2个最低有效字节 int checksum = 1; for(byte b : byteOutputStream.toByteArray()) { checksum += b; } 任何关于获取2个最低有效字节的输入都会很有帮助。Java 8在环境中使用。如果您真正指的是最低有效字节,那么: checksum & 0xFFFF 如果您的意思是要从校验

我需要通过tearrayoutputstream对
中的所有数据字节求和,将+1添加到结果中,并取2个最低有效字节

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

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

如果您真正指的是最低有效字节,那么:

checksum & 0xFFFF
如果您的意思是要从校验和中获取最低有效位,那么:

checksum & 0x3


这将使2个最低有效字节左边的所有内容都归零。

您的问题有点不明确。你也没有说,你想用这两个字节做什么,以及你想如何存储它们(这取决于你想做什么)

    int checksum = 1;
    for(byte b : byteOutputStream.toByteArray()) {
        checksum += b;
    }
要获取单个字节,可以使用

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;

可以在其他解决方案中看到。

您应该能够使用掩码和按位and来实现这一点。