Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java四字节到二进制';位掩码';_Java_Binary_Masking - Fatal编程技术网

Java四字节到二进制';位掩码';

Java四字节到二进制';位掩码';,java,binary,masking,Java,Binary,Masking,我试图从一个二进制文件中提取四个字节,并将它们转换为一个位掩码,表示数据为零,元数据为1 我假设我需要将它们转换成一个整数,或者将它们放在一起,然后通过移位来确定是否设置了位位置 我不知道如何将这四种方法结合在一起,得到一个32位的掩码,我可以一步一步地完成 int mask = (((int)hbyte) & 0xff) << 8 | (((int)lbyte) & 0xff); int-mask=((int)hbyte)和0xff)我总是使用以下命令 publi

我试图从一个二进制文件中提取四个字节,并将它们转换为一个位掩码,表示数据为零,元数据为1

我假设我需要将它们转换成一个整数,或者将它们放在一起,然后通过移位来确定是否设置了位位置

我不知道如何将这四种方法结合在一起,得到一个32位的掩码,我可以一步一步地完成

int mask = (((int)hbyte) & 0xff) << 8 | (((int)lbyte) & 0xff);

int-mask=((int)hbyte)和0xff)我总是使用以下命令

public static int compose(byte x3, byte x2, byte x1, byte x0) {
    return (x3 << 24)
            + ((x2 & 0xFF) << 16)
            + ((x1 & 0xFF) << 8)
            + ((x0  & 0xFF) << 0);
}
公共静态整数合成(字节x3、字节x2、字节x1、字节x0){

return(x3您可以使用
DataInputStream
从文件中读取4个字节作为int

或者,如果读取字节a、b、c、d:

int comboOfBytes = ((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff);

int combofBytes=((a&0xff)枚举集是一组枚举元素。你可能的意思是

我不知道你在做什么,但是如果你控制数据结构,如果你需要32个标志,我想创建一个布尔[32]数组会容易得多

是的,位标志可以节省内存,但除非有数百万位标志,否则这可能并不重要


我并不是说,从来没有一个时候,一个int由一堆位标志组成,然后被用来屏蔽数据流不是一个好主意,但我认为这很少是一个好主意。

我认为这比Mike Samuel解决方案优越,因为它允许您从少于4个字节生成位屏蔽。我建议最后的参数to帮助捕获维护错误。OT:我从不使用最终参数,因为它会使参数列表非常长且难以阅读。但是,我可以接受默认情况下所有参数都是最终参数。非常感谢迈克。这正好完成了任务!!杰伊,你说得对,这不是一个好主意,会让我头疼不已!:)它是Microsoft压缩算法的一部分,它使用一个4字节的位掩码来表示数据和元数据在流中的位置。我认为我遇到问题的原因是Java读取数据中字节的方式。